Java PDF 查看器 [英] Java PDF Viewer

查看:26
本文介绍了Java PDF 查看器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 java 和 RCP,我试图在我的视图中使用 Acrobat 显示 pdf 文档.我不需要改变它们.这段代码有这个错误.知道如何解决这个问题吗?P.s.:它同时工作得很好.

I am using java and RCP and I am trying to show pdf Document with Acrobat on my views. I don't need to change them. I have this error with this code. Any idea how to resolve this problem?. P.s.: it works good same times.

PDFFile pdfFile;
pdfFile = PdfFileLoader.loadPdf(file, new NullProgressMonitor());
PdfDocument pdfDocument = new OneDimensionalPdfDocument(pdfFile, new NullProgressMonitor());
pdfViewer.setPdfDocument(pdfDocument);

Error from PdfDocument pdfDocument = new OneDimensionalPdfDocument(pdfFile, new NullProgressMonitor()) : Unsupport CMap format: 6
java.nio.BufferUnderflowException
at java.nio.Buffer.nextGetIndex(Unknown Source)
at java.nio.HeapByteBuffer.getShort(Unknown Source)
at com.sun.pdfview.font.ttf.HmtxTable.setData(HmtxTable.java:79)
at com.sun.pdfview.font.ttf.TrueTypeTable.createTable(TrueTypeTable.java:113)
at com.sun.pdfview.font.ttf.TrueTypeFont.getTable(TrueTypeFont.java:106)
at com.sun.pdfview.font.TTFFont.getOutline(TTFFont.java:129)
at com.sun.pdfview.font.TTFFont.getOutline(TTFFont.java:89)
at com.sun.pdfview.font.OutlineFont.getGlyph(OutlineFont.java:118)
at com.sun.pdfview.font.PDFFont.getCachedGlyph(PDFFont.java:307)
at com.sun.pdfview.font.PDFFontEncoding.getGlyphFromEncoding(PDFFontEncoding.java:132)
at com.sun.pdfview.font.PDFFontEncoding.getGlyphs(PDFFontEncoding.java:98)
at com.sun.pdfview.font.PDFFont.getGlyphs(PDFFont.java:273)
at com.sun.pdfview.PDFTextFormat.doText(PDFTextFormat.java:283)
at com.sun.pdfview.PDFParser.iterate(PDFParser.java:742)
at com.sun.pdfview.BaseWatchable.run(BaseWatchable.java:88)
at java.lang.Thread.run(Unknown Source)

问候,海瑟姆

推荐答案

看看这些免费的 pdf 渲染器...

Have a look at these free pdf renderer ...

一些链接...

  1. http://www.icepdf.org/(现在位于 http://www.icesoft.org/java/projects/ICEpdf/overview.jsf - Apache 2 开源)

  1. http://www.icepdf.org/ (now at http://www.icesoft.org/java/projects/ICEpdf/overview.jsf - Apache 2 Open Source)

http://www.jpedal.org/support_siEclipse.php (现在在 https://www.idrsolutions.com/jpedal/ - 商业)

http://www.jpedal.org/support_siEclipse.php (now at https://www.idrsolutions.com/jpedal/ - commercial)

https://java.net/projects/pdf-renderer (仍然可用 https://github.com/yarick123/pdf-renderer - LGPL-2.1)

https://java.net/projects/pdf-renderer (still available https://github.com/yarick123/pdf-renderer - LGPL-2.1)

更新

根据 http://www.icepdf.org/ ,

ICEpdf 是一个开源 Java PDF可以渲染、转换或在任何 Java 中提取 PDF 内容应用程序或 Web 服务器上.

ICEpdf is an open source Java PDF engine that can render, convert, or extract PDF content within any Java application or on a Web server.

对于基本功能,您必须在类路径中包含 icepdf-core.jaricepdf-viewer.jar.根据需求,您还可以添加 SVG 支持.

For basic functionality you have to include icepdf-core.jar and icepdf-viewer.jar in your class path. Depending upon the requirement you can also add the SVG support.

取自 iceface 示例文件夹:

Taken from iceface sample folder:

import org.icepdf.ri.common.SwingController;
import org.icepdf.ri.common.SwingViewBuilder;

import javax.swing.*;

/**
 * The <code>ViewerComponentExample</code> class is an example of how to use
 * <code>SwingController</code> and <code>SwingViewBuilder</code>
 * to build a PDF viewer component.  A file specified at the command line is
 * opened in a JFrame which contains the viewer component.
 *
 * @since 2.0
 */
public class ViewerComponentExample {
    public static void main(String[] args) {
        // Get a file from the command line to open
        String filePath = args[0];

        // build a component controller
        SwingController controller = new SwingController();

        SwingViewBuilder factory = new SwingViewBuilder(controller);

        JPanel viewerComponentPanel = factory.buildViewerPanel();

        // add interactive mouse link annotation support via callback
        controller.getDocumentViewController().setAnnotationCallback(
                new org.icepdf.ri.common.MyAnnotationCallback(
                        controller.getDocumentViewController()));

        JFrame applicationFrame = new JFrame();
        applicationFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        applicationFrame.getContentPane().add(viewerComponentPanel);

        // Now that the GUI is all in place, we can try openning a PDF
        controller.openDocument(filePath);

        // show the component
        applicationFrame.pack();
        applicationFrame.setVisible(true);
    }
}

以上代码可帮助您在摆动组件上显示 PDF.你可以在 SWT 环境中做同样的事情(看看 SwingViewBuilder .. 有点难,但会 SWT 的外观和感觉)或使用 org.eclipse.swt.awt.SWT_AWT(有点简单......但会有swing + swt的外观和感觉)......尽管这两种方法都可以解决你的目的.还要检查许可证文件夹中的适用许可证.

The above code helps you in displaying a PDF on a swing component. You can do the same in the SWT environment (have a look at SwingViewBuilder .. kind of hard, but will SWT look and feel ) or use org.eclipse.swt.awt.SWT_AWT (kind of easy... but will have swing + swt look and feel)... though both approach will solve your purpose. Also check the applicable licenses in the license folder.

希望这会有所帮助.

这篇关于Java PDF 查看器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆