在PrintedPdfDocument画布中绘制视图时,PDF的大小(以字节为单位)会明显增加,尤其是当视图包含位图(例如ImageView)时。
减少最终大小的一种方法应该是PrintAttributes中的分辨率字段,例如:
PrintAttributes printAttrs = new PrintAttributes.Builder().
setColorMode(PrintAttributes.COLOR_MODE_COLOR).
setMediaSize(PrintAttributes.MediaSize.ISO_A4).
setResolution(new Resolution("zooey", PRINT_SERVICE,hDpi,vDpi)).
setMinMargins(Margins.NO_MARGINS).
build();
PdfDocument document = new PrintedPdfDocument(this, printAttrs);
然而,无论我选择什么作为hDpi和vDpi,PDF最终大小都不会改变。
我做错了吗?如何减小PDF尺寸?
答案 0 :(得分:1)
根据我的经验,分辨率设置不会影响PrintedPDfDocument文件生成的最终结果。
以下是PrintedPDfDocument构造函数的源代码。
private static final int POINTS_IN_INCH = 72;
public PrintedPdfDocument(Context context, PrintAttributes attributes) {
MediaSize mediaSize = attributes.getMediaSize();
// Compute the size of the target canvas from the attributes.
mPageWidth = (int) (((float) mediaSize.getWidthMils() / MILS_PER_INCH)
* POINTS_IN_INCH);
mPageHeight = (int) (((float) mediaSize.getHeightMils() / MILS_PER_INCH)
* POINTS_IN_INCH);
// Compute the content size from the attributes.
Margins minMargins = attributes.getMinMargins();
final int marginLeft = (int) (((float) minMargins.getLeftMils() / MILS_PER_INCH)
* POINTS_IN_INCH);
final int marginTop = (int) (((float) minMargins.getTopMils() / MILS_PER_INCH)
* POINTS_IN_INCH);
final int marginRight = (int) (((float) minMargins.getRightMils() / MILS_PER_INCH)
* POINTS_IN_INCH);
final int marginBottom = (int) (((float) minMargins.getBottomMils() / MILS_PER_INCH)
* POINTS_IN_INCH);
mContentRect = new Rect(marginLeft, marginTop, mPageWidth - marginRight,
mPageHeight - marginBottom);
}
你可以看到代码不使用DPI参数,它使用72作为固定DPI来计算页面宽度/高度,我认为这是错误的。
当我尝试使用PrintedPDfDocument API在平板电脑上打印15页网页时,我收到了1G PDF文件。
所以我对你的问题的建议是使用另一个PDF生成库,直到PrintedPDfDocument稍后证明。
祝你好运。
答案 1 :(得分:0)
为此的最佳解决方案是使用像素代替dp和sp来设计用于生成PDF的视图