2013-10-31 101 views
1

我一直在嘗試編輯PDF文檔來預填表單條目。我有它的工作(有點)。我添加的文字沒有問題。然而,其他已經存在的文本似乎已經被替換爲「&%!!」符號,我已經發現它與下面代碼中的「contentStream」部分有關,它似乎是「 setfont程序」行。如果我刪除它,頁面仍OK ......除了 「你好理查德」 文本將不再顯示!PDFBox加擾文本

請幫助!

package pdfboxtest; 

import java.awt.Color; 
import java.util.List; 
import org.apache.pdfbox.pdmodel.PDDocument; 
import org.apache.pdfbox.pdmodel.PDPage; 
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream; 

public class PDFFormFiller { 

    private static final String R40_NEW_FORM_PATH = "c:\\temp\\hmrc-r40.pdf"; 
    private static final String R40_COMPLETED_FORM_PATH = "c:\\temp\\hmrc-r40-complete.pdf"; 

    public static void main(String[] args) throws Exception { 
     PDDocument doc = PDDocument.load(R40_NEW_FORM_PATH); 

     addTextToPage(doc); 

     doc.save(R40_COMPLETED_FORM_PATH); 
     doc.close(); 
    } 

    private static void addTextToPage(PDDocument doc) throws Exception { 
     List pages = doc.getDocumentCatalog().getAllPages(); 
     PDPage firstPage = (PDPage) pages.get(0); 
     PDPageContentStream contentStream = new PDPageContentStream(doc, firstPage, true, true); 

     contentStream.setFont(PDType1Font.HELVETICA_BOLD, 24); 
     contentStream.beginText(); 
     contentStream.setNonStrokingColor(Color.BLACK); 
     contentStream.moveTextPositionByAmount(100, 200); 
     contentStream.drawString("HELLO RICHARD!!"); 
     contentStream.endText(); 
     contentStream.close(); 

    } 
} 

This is the top of the form before I add text elsewhere And after I've added text elsewhere, this bit of text goes nuts! I did not edit this bit though

+0

Longshot,但你有沒有嘗試從系統中加載字體就像這樣? PDFont font = PDTrueTypeFont.loadTTF(document,「C:\\ Windows \\ Fonts \\ segoepr.ttf」); – Levenal

+0

這絕對值得刺!謝謝,但沒有運氣:-( –

+0

這可能是由於PDFBox的問題,我描述了一種解決方法[本答案](http://stackoverflow.com/questions/19322553/adding-header-to-existing-pdf -Field-using-pdfbox/19512650#19512650)。 – mkl

回答

1

正如在評論中已經假設的那樣,由於PDFBox,這是問題我在this answer中描述了一種解決方法。這個問題在PDFBox 1.8.2版本中仍然存在,但同時已經爲版本1.8.3和2.0.0修正,參見參考資料。 PDFBOX-1753

在你的情況下,解決辦法改變addTextToPage方法是這樣的:

private static void addTextToPage(PDDocument doc) throws IOException { 
    List pages = doc.getDocumentCatalog().getAllPages(); 
    PDPage firstPage = (PDPage) pages.get(0); 
    PDPageContentStream contentStream = new PDPageContentStream(doc, firstPage, true, true); 

    firstPage.getResources().getFonts(); // <<<<<< 

    contentStream.setFont(PDType1Font.HELVETICA_BOLD, 24); 
    contentStream.beginText(); 
    contentStream.setNonStrokingColor(Color.BLACK); 
    contentStream.moveTextPositionByAmount(100, 200); 
    contentStream.drawString("HELLO RICHARD!!"); 
    contentStream.endText(); 
    contentStream.close(); 
} 

添加的行強制其new PDPageContentStream忘記,但是,setFont計數已完成初始化。你可以在上面提到的答案中找到詳細信息。您可能想要通知PDFBox開發。

+0

非常棒!謝謝。我可以向你保證我確實在StackOverflow上做過一些搜索,但是我可能沒有評估你給我的答案。哇!小問題! –