我正在使用PdfRenderer上面的api 21在我的应用程序中显示pdf,我注意到页面的质量非常差.我也跟着谷歌样本使用PdfRenderer,这就是我Bitmap为页面创建的方式:
//mCurrentPage is a PdfRenderer.Page and mImageView is an ImageView
Bitmap bitmap = Bitmap.createBitmap(mCurrentPage.getWidth(),
mCurrentPage.getHeight(),
Bitmap.Config.ARGB_8888);
mCurrentPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
mImageView.setImageBitmap(bitmap);
Run Code Online (Sandbox Code Playgroud)
我用过,ARGB_8888因为据我所知,它是显示位图的最佳质量.难道我做错了什么?
编辑
这是PdfRenderer类和经典Pdf阅读器之间的巨大差异:
存在用于在Android上绘制PDF文件的库吗?
我找到了PDFBox,这是一个JSE库,想知道它是否可以用来在Android上绘制PDF.
我知道Android将标准字节码转换为Dalvik Bytecodes,但它如何将类似BufferedImage的类转换为框架可以将PDF文件转换为?
即使对于付费图书馆,任何建议都是有帮助的.
我按照以下示例在我的应用程序(Xamarin.iOS)中查看pdf.一切正常,直到最近我才开始注意到使用这种方法无法读取一些pdf文件.
我打开并获取了我的mac信息,我注意到以下内容:
我可以使用Mac的查看器将每个文件导出为pdf,但这比我需要的更多.我该怎么做才能解决这个问题?
原始编码:Adobe Acrobat 10.1.16中的PDFScanLib v1.2.2
导出编码:Mac OS X 10.10.5 Quartz PDFContext
我对该程序运行了额外的测试,我可以得出结论问题是在pdf文件上使用了压缩.CGPDFDocument有没有办法删除或忽略压缩,所以我可以查看pdf?我将pdf上传到我分割页面的移动后端.我正在使用Pdfsharp来实现这一目标,如果可能的话有没有办法在保存到服务器之前清理文件?(此问题仅影响我的应用程序的iOS版本).
经过额外的测试后,我遇到了以下错误:这里 看起来使用的JBIG2压缩有一个已知的错误,当在pdf中读取jpg时会导致错误.(我将继续进一步测试,直到找到解决方案.)
更正:pdf压缩不是JBIG2,而是FlateDecode.在测试并读取二进制数据之后,我注意到原始数据和导出数据都具有相同类型的压缩.(当我尝试解决这个问题时,会更新更多信息.)
我正在使用https://www.npmjs.com/package/html-pdf库,该库基于Phantom JS,内部使用webkit.我正在粘贴虚拟HTML和JS代码(将这些文件保存在1个文件夹中)并附加输出屏幕截图.
我面临的问题是在Windows上生成的PDF顶部有一些额外的空间(红色以上的空白区域),我无法摆脱它.
这是一个讨论类似问题的论坛(过时),https://groups.google.com/forum/#!topic /phantomjs/YQIyxLWhmr0.
input.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<div id="pageHeader" style="border-style: solid;border-width: 2px;color:red;">
header <br/> header <br/> header <br/> header
</div>
<div id="pageContent" style="border-style: solid;border-width: 2px;color:green;">
<div>
body <br/> body <br/> body
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
JS (你需要路径,fs,把手,html-pdf npm包)
var path = require('path');
var fs = require('fs');
var handlebars = require('handlebars');
var pdf = require('html-pdf');
saveHtml();
function saveHtml() {
fs.readFile('input.html', 'utf-8', {
flag: …Run Code Online (Sandbox Code Playgroud) 当我用Instruments分析我的应用程序时,我发现分配的数据CGContextDrawPDFPage不会立即释放.应用程序因为崩溃而崩溃CGContextDrawPDFPage.
你好,这是我在CATiledlayer中绘制pdf的代码
- (void)drawLayer:(CATiledLayer *)layer inContext:(CGContextRef)context
{
if (_PDFPageRef == nil) {
return;
}
CGPDFPageRef drawPDFPageRef = NULL;
CGPDFDocumentRef drawPDFDocRef = NULL;
@synchronized(self) // Briefly block main thread
{
drawPDFDocRef = CGPDFDocumentRetain(_PDFDocRef);
if( _PDFPageRef != (__bridge CGPDFPageRef)([NSNull null]) )
drawPDFPageRef = CGPDFPageRetain(_PDFPageRef);
else
return;
}
//CGContextSetRGBFillColor(context, 0.0f, 0.0f, 0.0f, 0.0f);
//CGContextFillRect(context, CGContextGetClipBoundingBox(context));
if (drawPDFPageRef != NULL) // Render the page into the context
{
CGFloat boundsHeight = viewBounds.size.height;
if (CGPDFPageGetRotationAngle(drawPDFPageRef) == 0)
{
CGFloat boundsWidth = …Run Code Online (Sandbox Code Playgroud) 我正在使用ITextRenderer从HTML生成PDF,我需要做的是收银机收据.此收据具有动态宽度,当然还有动态内容.这就是说,内容的高度总是不同的,现在我正在努力寻找一种方法来调整PDF页面的高度到内容.如果它太大,收据最后会有一个很长的白色部分,如果要缩短PDF的分页,我需要它只在一个页面中.
我正在使用@page {size: Wpx Hpx;}设置页面大小,但根据宽度和数据计算内容高度几乎是不可能的(非常痛苦).
这是生成PDF的代码:
ITextRenderer renderer = new ITextRenderer();
byte[] bytes = htmlDocumentString.toString().getBytes("UTF-8");
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputSource is = new InputSource(bais);
Document doc = builder.parse(is);
renderer.setDocument(doc, null);
renderer.layout();
renderer.createPDF(outputStream);
outputStream.flush();
outputStream.close();
Run Code Online (Sandbox Code Playgroud)
我也试过了renderer.getSharedContext().setPrint(false);,但这会引发NPE.
也@page {-fs-page-sequence: "none";}没有任何运气.
--------------"解决方案"----------------
我找到的解决方案甚至不是很接近完美,但有效!
ITextRenderer renderer = new ITextRenderer();
byte[] bytes = htmlDocumentString.toString().getBytes("UTF-8");
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputSource is = new InputSource(bais);
Document doc = builder.parse(is);
renderer.setDocument(doc, null); …Run Code Online (Sandbox Code Playgroud) 在Android 5.0中,Google推出了PdfRenderer类,非常适合渲染PDF.问题是它仅适用于minSDK 21. https://developer.android.com/reference/android/graphics/pdf/PdfRenderer.html
如何确定是否有计划将此类包含在支持库中?
在Android 5.0中,Google推出了用于呈现PDF的PdfRenderer类.我尝试使用它渲染pdf并且它有效.但是,当谈到受密码保护的PDF时,我找到了打开它的方法.
有没有人这样做或有任何想法如何解决这个问题.请建议.
我正在尝试使用PdfRenderer,并且要求使用Zoom和scroll可用,但在Android PdfRenderer中不提供任何缩放和滚动支持,只有页面导航支持可用.
但我猜缩放和滚动支持可以实现,因为PdfRenderer使用位图来使用imageview显示内容.
如何使用Google PdfRenderer示例实现缩放和滚动支持?
PS:我正在使用Google提供的这个PdfRenderer示例,https://github.com/googlesamples/android-PdfRendererBasic
我正在使用java和RCP,我试图在我的视图上显示带有Acrobat的pdf文档.我不需要改变它们.我有这个代码的错误.知道如何解决这个问题吗?Ps:它同时运作良好.
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)
Run Code Online (Sandbox Code Playgroud)
此致,Haythem