2013-10-02 4 views
0

Я пытаюсь сделать существующий pdf в pdf/a-1b. Я понимаю, что itext не может преобразовать PDF в pdf/a в том смысле, что делает его pdf/совместимым. Но это определенно может обозначить документ как pdf/a. Тем не менее, я посмотрел на различные примеры, и я не могу понять, как это сделать. Важная проблема в том, чтоСуществующий PDF to PDF/A «преобразование»

writer.PDFXConformance = PdfWriter.PDFA1B; 

больше не работает. Первый PDFA1B не распознается, во-вторых, pdfwriter, похоже, был переписан, и об этом мало информации. Кажется, единственный (в IText версии Java) способ:

PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(filename), PdfAConformanceLevel.PDF_A_1B); 

Но это требует тип документа, то есть. его можно использовать при создании PDF с нуля.

Может ли кто-нибудь привести пример pdf в pdf/преобразование с текущей версией itextsharp? Спасибо.

ответ

1

Я не могу представить себе вескую причину для этого, но, по-видимому, у вас его есть.

Параметры соответствия в iText предназначены для использования с PdfWriter, и этот объект (как правило) предназначен только для использования с новыми документами. Поскольку iText никогда не собирался конвертировать документы в соответствие, это именно то, как оно было построено.

Чтобы сделать то, что вы хотите сделать, вы можете либо открыть исходный документ, либо обновить соответствующие теги в словаре документа, либо создать новый документ с соответствующими наборами записей, а затем импортировать старый документ. В приведенном ниже коде показан последний маршрут, он сначала создает обычный несоответствующий PDF-файл, а затем создает второй документ, в котором говорится, что он соответствует, даже если он может или не может. Дополнительную информацию см. В комментариях к коду. Это нацелено на iTextSharp 5.4.2.0.

//Folder that we're working from 
var workingFolder = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 

//Create a regular non-conformant PDF, nothing special below 
var RegularPdf = Path.Combine(workingFolder, "File1.pdf"); 
using (var fs = new FileStream(RegularPdf, FileMode.Create, FileAccess.Write, FileShare.None)) { 
    using (var doc = new Document()) { 
     using (var writer = PdfWriter.GetInstance(doc, fs)) { 
      doc.Open(); 

      doc.Add(new Paragraph("Hello world!")); 

      doc.Close(); 
     } 
    } 
} 

//Create our conformant document from the above file 
var ConformantPdf = Path.Combine(workingFolder, "File2.pdf"); 
using (var fs = new FileStream(ConformantPdf, FileMode.Create, FileAccess.Write, FileShare.None)) { 
    using (var doc = new Document()) { 

     //Use PdfSmartCopy to get every page 
     using (var copy = new PdfSmartCopy(doc, fs)) { 

      //Set our conformance levels 
      copy.SetPdfVersion(PdfWriter.PDF_VERSION_1_3); 
      copy.PDFXConformance = PdfWriter.PDFX1A2001; 

      //Open our new document for writing 
      doc.Open(); 

      //Bring in every page from the old PDF 
      using (var r = new PdfReader(RegularPdf)) { 
       for (var i = 1; i <= r.NumberOfPages; i++) { 
        copy.AddPage(copy.GetImportedPage(r, i)); 
       } 
      } 

      //Close up 
      doc.Close(); 
     } 
    } 
} 

Просто чтобы быть 100% ясно, это не будет делать совместимый PDF, только документ, который говорит, что он соответствует.

+0

Благодарим вас за ответ. Пример обеспечивает соответствие PDFX. Как я могу установить документ в формате PDF/A-1B? В примерах, которые я нашел, упоминается PDFA1B вместо PDFX1A2001, однако в нем 5.4.4 нет определения PDFA1B, я прошел через источник, и на самом деле нет упоминания о PDFA1B. – leosenko

+0

У меня нет компилятора перед моим, но похоже, что у вас есть ответ: http://itext-general.2136553.n4.nabble.com/PDFA1A-amp-PDFA1B-td4655849.html –

+0

Это на самом деле что я уже встречал, проблема заключается в том, как включить синтаксис PdfAWriter в ваш пример, который использует PdfSmartCopy. Я считаю, что мне нужно сделать это, чтобы импортировать страницы в класс документа, а затем использовать этот класс документа с PdfAWrite. У вас есть идея, как это сделать? Спасибо. – leosenko

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