내가 @scanny에 의해 주어진 의견을 보내 주셔서 감사합니다. python-docx
에서이 작업을 수행 할 방법이 없기 때문에 어쨌든이 문서를 PDF로 변환하고 있으므로 Word 문서를 PDF로 변환 한 후 pdfminer
을 사용하여 페이지 번호를 가져 오기로했습니다. 이 코드는 오래있을 수 있지만,이 후
import re
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from cStringIO import StringIO
def xmlToLines(xml):
text = ''.join(xml)
return text.split('\n')
#Convert a PDF found at the 'path' and turns it into XML lines
#path is the full path directory to the PDF file you're reading from
def convert_pdf_to_xml(path):
rsrcmgr = PDFResourceManager()
retstr = StringIO()
codec = 'utf-8'
laparams = LAParams()
device = XMLConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
fp = file(path, 'rb')
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0
caching = True
pagenos=set()
print 'Converting following file from PDF to XML: \n - ' + str(path)
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
interpreter.process_page(page)
text = retstr.getvalue()
lines = xmlToLines(text)
#Close out pdf and I/O's
fp.close()
device.close()
retstr.close()
return lines
#returns a list of every page number where the field marker is found in the PDF
def getPagesWithField(wordPdfPath, field):
lines = convert_pdf_to_xml(wordPdfPath)
page_regex = r'page id="[0-9]*"'
t_regex = r'<text font='
pagesFound = []
text = ''
field = field.replace('<','&').replace('>','&')
for i in range(len(lines)):
#If it's a new page line, increment to the new page
if len(re.findall(page_regex, lines[i])) > 0:
page = int(re.findall(r'[0-9]{1,}', lines[i])[0])
#print 'page: ' + str(page)
#If it's the end of a line
elif lines[i] == '<text>':
#print "Text: " + text
#check if the collected text is the field you're looking for
if field in text:
pagesFound.append(page)
text = ''
#If it's a line with a text character, add it to text
elif len(re.findall(t_regex, lines[i])) > 0:
text = str(text + re.findall(r'>[^\r\n]*</text>',lines[i])[0][1])
pagesFound = list(set(pagesFound))
pagesFound.sort()
return pagesFound
을 일을 얻을, PyPDF2
내가에 마커를 배치 한 경우
출처
2017-05-17 23:25:31
Jed
어떤 옵션을 나에게 열어 수행 병합/간단한 PDF 페이지 삽입에 사용할 수 있습니다 페이지 나누기를 사용하는 모든 페이지? 또는 글꼴 렌더링 등의 문제로 인해 여전히 문제가 발생합니까? – Jed
'python-docx' 자체에서 페이지 번호를 얻을 방법이 없습니다. 문서가 페이지 넘김을 막을 수있는 수동 페이지 나누기를 설정했다면 직접 계산할 수 있습니다. 그러나 콘텐츠가 가변적이라면 문제가 될 수 있습니다. – scanny