1

我在telufu pdf 中有 pdf(将 anils.com 替换为 123.176.47.55)我想从该 pdf 中提取一些文本(例如在我需要阅读的 pdf 页面第 3 号第 3 块数据中)为此我下载该页面的所有字体使用mupdf-1.3-windows

它下载pdf使用的所有字体但是当我通过使用这些字体将文本写入另一个pdf时,一些文本没有被重新编写,代码就像

//output file name
public static String pdf1 = "C:\\Documents and Settings\\Administrator\\Desktop\\itextpdf\\anil.pdf";

public static void main(String[] args) throws IOException, DocumentException {
    try {
        PdfReader reader = new PdfReader(new URL("http://anils/DraftRolls/PDFGeneration.aspx?urlPath=D%3a\\SSR_2013_FINAL+ROLLS\\AC_238\\Telugu\\S01A238P038.PDF"),null);
        System.out.println("This PDF has "+reader.getNumberOfPages()+" pages.");

        // reading page no 3 
        String page = PdfTextExtractor.getTextFromPage(reader, 3);                     

        // all fonts I had checked total of 7 fonts but I didn't get all the fonts 
        BaseFont f = BaseFont.createFont("C:\\Documents and Settings\\Administrator\\Desktop\\itextpdf\\fonts\\AAAAAD+Gautami-0174.ttf", "", BaseFont.EMBEDDED);
        Font telugu = new Font(f, 18.0f, Font.BOLD);

        Paragraph description = new Paragraph(page,telugu);

        // description.setAlignment(Paragraph.ALIGN_CENTER); 

        Document document = new Document();
        // step 2
        PdfWriter.getInstance(document, new FileOutputStream(pdf1));
        // step 3
        document.open();
        document.add(description);
        document.close();
    }
    catch(Exception e)
    {
        System.out.println(e);
    }
}

一些文本从未匹配任何字体如何解决这个问题?

4

2 回答 2

0

正如您在对原始问题的评论中提到的那样,文本可以像原始问题一样组织,无需重排它,将原始页面作为模板导入并仅显示选定区域可能是满足您需求的解决方案:

public void testImportFragment() throws IOException, DocumentException
{
    PdfReader reader = new PdfReader(new URL("http://anils/DraftRolls/PDFGeneration.aspx?urlPath=D%3a\\SSR_2013_FINAL+ROLLS\\AC_238\\Telugu\\S01A238P038.PDF"),null);
    Document document = new Document();
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:\\Documents and Settings\\Administrator\\Desktop\\itextpdf\\anil.pdf"));
    document.open();
    document.newPage();
    document.add(new Paragraph("Test importing the contents of the first row of page three in a different order."));
    copyFragment(reader, writer);
    document.close();
    reader.close();
}

public void copyFragment(PdfReader source, PdfWriter target) throws DocumentException
{
    PdfImportedPage page = target.getImportedPage(source, 3);
    PdfContentByte directContent = target.getDirectContent();

    PdfTemplate template = directContent.createTemplate(110, 57);
    template.addTemplate(page, 1, 0, 0, 1, -15, -706);
    directContent.addTemplate(template, 200, 700);

    template = directContent.createTemplate(110, 57);
    template.addTemplate(page, 1, 0, 0, 1, -202, -705);
    directContent.addTemplate(template, 200, 600);

    template = directContent.createTemplate(110, 57);
    template.addTemplate(page, 1, 0, 0, 1, -389, -705);
    directContent.addTemplate(template, 200, 500);
}
于 2013-09-27T15:21:40.047 回答
0

我认为在本地做这件事太难了。

您应该将其转换为另一种格式,最好是基于文本的。

我经常需要提取矢量模式,为此我个人使用 svg。

于 2013-09-26T20:54:32.313 回答