2015-03-16 2 views
1

Я использую PyPDF2 1.4 и Python 2.7:PyPDF2, Set PDF версия

Как я могу изменить PDF версию из входного файла в выходной файл?

from PyPDF2 import PdfFileWriter, PdfFileReader 
from PyPDF2.generic import NameObject, createStringObject 

input_filename = 'my_input_filename.pdf' 

# Read input PDF file 
inputPDF = PdfFileReader(open(input_filename, 'rb')) 
info = inputPDF.documentInfo 

for i in xrange(inputPDF.numPages): 
    # Create output PDF 
    outputPDF = PdfFileWriter() 
    # Create dictionary for output PDF 
    infoDict = outputPDF._info.getObject() 
    # Update output PDF metadata with input PDF metadata 
    for key in info: 
     infoDict.update({NameObject(key): createStringObject(info[key])}) 
    outputPDF.addPage(inputPDF.getPage(i)) 

with open(output_filename , 'wb') as outputStream: 
    outputPDF.write(outputStream) 
+6

консультировались вы документацию PyPDF2? Что вы пробовали? –

+0

_my_input_filename.pdf_ является PDF-версией 1.5, но _my_output_filename.pdf _is 1.3 PDF, я хочу сохранить 1,5 на выходе –

ответ

1

PyPDF2 в его текущей версии не ничего, кроме файлов с заголовком PDF1.3 производства; от the official source code: класса PdfFileWriter (объект):

""" 
    This class supports writing PDF files out, given pages produced by another 
    class (typically :class:`PdfFileReader<PdfFileReader>`). 
    """ 
    def __init__(self): 
     self._header = b_("%PDF-1.3") 
     ... 

Если это правового, полагая, что это дает вам возможность подати в> 1.3 вещей, сомнительно.

Если вы хотите просто исправить строку версии в заголовке (я не знаю, последствия это будет иметь, таким образом, я предполагаю, что вы знаете больше о стандарте PDF, чем я!)

from PyPDF2.utils import b_ 
... 
outputPDF._header.replace(b_("PDF-1.3"),b_("PDF-1.5")) 

или что-то подобное.

1

Going добавить к ответу Маркуса выше:

Там (в настоящее время - я не могу говорить, когда Маркус написал свой пост) ничего не мешает вам указать версию в метаданных с использованием стандартной функции PyPDF2 addMetadata. Ниже приведен пример использования PdfFileMerger (как я недавно будучи делать некоторые очистку PDF метаданных существующих файлов), но PdfFileWriter имеет ту же функцию:

from PyPDF2 import PdfFileMerger 

# Define file input/output, and metadata containing version string. 
# Using separate input/output files, since it's worth keeping a copy of the originals! 
fileIn = 'foo.pdf' 
fileOut = 'bar.pdf' 
metadata = { 
    u'/Version': 'PDF-1.5' 
} 

# Set up PDF file merger, copy existing file contents into merger object. 
merger = PdfFileMerger() 

with open(fileIn, 'rb') as fh_in: 
    merger.append(fh_in) 

# Append metadata to PDF content in merger. 
merger.addMetadata(metadata) 

# Write new PDF file with appended metadata to output 
# CAUTION: This will overwrite any existing files without prompt! 
with open(fileOut, 'wb') as fh_out: 
    merger.write(fh_out) 
+1

К сожалению, это больше не работает, но предложение Маркуса может быть адаптировано к взлому; если вы заходите в файл модуля PyPDF2.pdf, вы можете найти, где он устанавливает self.header: {self.header = b _ ("% PDF-1.3")} и изменить * 1.3 * на любую версию pdf, которую вы сочтете нужным. Однако у меня нет способа тестирования, если это фактически устанавливает его в другую версию или просто меняет тег где-нибудь, может ли кто-нибудь помочь? – BladorthinTheGrey

Смежные вопросы