跳到内容
  • 福昕首页
  • 开发中心
  • SDK文档资料
  • 福昕首页
  • 开发中心
  • SDK文档资料
申请试用
  • 企业自动化
    • Compressor
  • 福昕CloudAPI
  • 福昕PDF SDK 软件开发工具包
    • 福昕PDF SDK(ActiveX)
    • 福昕PDF SDK(桌面/服务器)
    • 福昕PDF SDK(Plug-in)
    • 福昕 PDF SDK(安卓)
    • 福昕PDF SDK(iOS)
    • 福昕PDF SDK(Web)
  • 福昕管理控制台
    • 公有云
    • 私有云
    • 通用情况
  • 福昕阅读器
    • RMS插件
  • 福昕高级编辑器
    • AI助手
    • Mac版本
      • 常规问题
    • windows版本
      • ECM集成
      • 互联PDF
      • 企业管理指南
      • 保护
      • 内容编辑
      • 创建PDF
      • 压缩
      • 图章
      • 安装与卸载
      • 常见问题
      • 打印
      • 注释/评论
      • 福昕插件
      • 翻译助手
      • 翻译助手教程
      • 试用与激活
      • 转换
      • 页面管理
    • 教育用户
      • 论文查重
      • 论文畅
    • 网页版
      • 电子签章
    • 订阅
    • 资源
  • 福昕高级编辑器Linux版本
  • 福船图纸管理系统
  • 福昕PDF SDK 软件开发工具包 > 福昕PDF SDK(桌面/服务器)
  • 标签:
  • Bitmap,dpi,RectF,像素,分块,图片,图纸,坐标,大型图纸,大型图纸文件,渲染,矩形块

如何利用PDF SDK将大型图纸分割为图片分块以提升渲染性能?

  • 福昕知识库
  • 2025-05-28

当用户浏览大型图纸PDF文件时,常会遇到渲染缓慢或无法打开的问题。通过分块渲染技术,可以将原始PDF文件转换为由多张图片拼接而成的新PDF文件,从而显著提升渲染速度。该方法还支持自定义清晰度调节和抗锯齿等图像处理效果。实现代码如下:

public splitImage throws PDFException {
PDFDoc doc = new PDFDoc("68699708#01.pdf");
{
doc.load(null);
PDFDoc docNew = new PDFDoc();
docNew.load(null);
int step_H = 50;
int step_W = 100;
for (int i = 0; i < doc.getPageCount(); i++)
{
PDFPage page = new PDFPage(doc.getPage(i));
{
page.startParse(0, null, true);
int rotation = page.getRotation();
// page.Normalize();
page.startParse(0, null, false);
float pageW = page.getWidth();
float pageH = page.getHeight();
//
PDFPage pageNew = docNew.insertPage(docNew.getPageCount(), pageW, pageH);
pageNew.startParse(0, null, true);
for (int row = 0; row < page.getHeight() / step_H; row++)
{
for (int col = 0; col < page.getWidth() / step_W; col++)
{
float left = col * step_W;
float bottom = row * step_H;
float right = (col + 1) * step_W > pageW ? pageW : (col + 1) * step_W;
float top = (row + 1) * step_H > pageH ? pageH : (row + 1) * step_H;
RectF rect = new RectF(left, bottom, right, top);
Bitmap bitmap = renderABitmapAtRectF(page, rect, 400, 400);
Image image = new Image();
{
image.addFrame(bitmap);
rect = new RectF(left, bottom, right, top);
pageNew.addImage(image, 0, new PointF(rect.getLeft(), rect.getBottom()), rect.width(), rect.height(), false);
}
}
pageNew.generateContent();
//每渲染完一行,保存查看一下
//docNew.saveAs("暖通平面图(1)_ConvertToBitmap.pdf", 0);
}
}
}
docNew.saveAs("test17.pdf", 0);
}
Library.release();
}
static Bitmap renderABitmapAtRectF(PDFPage page, RectF rectf, int dpiX, int dpiY) throws PDFException {
float w = rectf.width();
float h = rectf.height();
float proX = (float)dpiX / 72;
float proY = (float)dpiY / 72;
int width = (int)(page.getWidth() * proX);
int height = (int)(page.getHeight() * proY);
//float v = rectf.getLeft() * proX;
rectf.setLeft(rectf.getLeft() * proX);
//rectf.right = (rectf.getRight() * proX);
rectf.setRight(rectf.getRight() * proX);
//rectf.bottom = (rectf.bottom * proY);
rectf.setBottom(rectf.getBottom() * proY);
//rectf.top = (rectf.top * proY);
rectf.setTop(rectf.getTop() * proY);

Matrix2D matrix = page.getDisplayMatrix(-1 * (int)rectf.getLeft(), -1 * (int)(height - rectf.getTop()), width, height, 0);
Bitmap bitmap=new Bitmap((int)(rectf.width()), (int)(rectf.height()), e_DIBRgb, null, 0);
bitmap.fillRect(0xFFFFFFFF,null);

Renderer render = new Renderer(bitmap, false);
/* render.setRenderEnhanceThinLines(true);
render.setRenderPathThinLine(true);*/
//开始渲染
render.startRender(page, matrix, null);
return bitmap;
}

实现原理说明:

  1. 页面分割
    将每页按固定尺寸(宽度step_W=100像素,高度step_H=50像素)划分为网格区域,每个区域定义为矩形块(RectF)。
  2. 图像块渲染
    对每个矩形块调用renderABitmapAtRectF方法,将PDF页面局部内容渲染为位图(Bitmap)。
  3. PDF重构
    将所有生成的位图按原始坐标位置插入到新PDF的对应页面中,最终生成优化后的PDF文件。

相关内容

WebSDK中如何自定义注释字体列表的显示顺序

编辑器只显示菜单,怎么固定显示菜单底下的功能区?

福昕高级PDF编辑器订阅账号转到新设备使用时,无法打开移除页面怎么办?

如何使用文件柜添加文件?

文档工作台中PDF如何批量设置页眉页脚?

如何使用文档雷达快速查看接收到的文件?

如何设置注释内容的默认字体

高效制作多目标提交PDF表单的两种解决方案

如何将原PDF文本层覆盖到图片PDF上以实现可复制和编辑功能?

代码实现PDF文件加密

推荐内容

WebSDK中如何自定义注释字体列表的显示顺序

编辑器只显示菜单,怎么固定显示菜单底下的功能区?

福昕高级PDF编辑器订阅账号转到新设备使用时,无法打开移除页面怎么办?

如何使用文件柜添加文件?

文档工作台中PDF如何批量设置页眉页脚?

如何使用文档雷达快速查看接收到的文件?

如何设置注释内容的默认字体

高效制作多目标提交PDF表单的两种解决方案

如何将原PDF文本层覆盖到图片PDF上以实现可复制和编辑功能?

代码实现PDF文件加密

产品
  • 应用行业
  • 白皮书
开发支持
  • 开发中心
  • SDK文档资料

销售咨询:010-50951668

客服电话:0591-38509808

销售咨询
微信公众号

©2025 福建福昕软件开发股份有限公司 版权所有

隐私策略