2013-10-02 37 views
0

我試圖讓現有的PDF轉換成PDF/A-1B。據我所知,itext無法將pdf轉換爲pdf/a,使其符合pdf/a標準。但它肯定可以將文檔標記爲pdf/a。然而,我看了各種例子,我似乎無法弄清楚如何去做。主要問題是現有的PDF至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,但是,在itextsharp 5.4.4中沒有PDFA1B的定義,我經歷了源​​代碼,並且沒有提及PDFA1B。 – leosenko

+0

我沒有在我前面的編譯器,但它看起來像這樣有你的答案:http://itext-general.2136553.n4.nabble.com/PDFA1A-amp-PDFA1B-td4655849.html –

+0

這實際上是我已經遇到過,問題是如何將PdfAWriter的語法合併到使用PdfSmartCopy的示例中。我相信我需要做的是將頁面導入到文檔類中,然後將這個文檔類與PdfAWrite一起使用。你有一些想法如何做到這一點?謝謝。 – leosenko