明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 14519|回复: 103

批量插入PDF文件到cad

  [复制链接]
发表于 2023-8-24 16:47:18 | 显示全部楼层 |阅读模式
本帖最后由 jun353835273 于 2023-8-30 09:15 编辑

使用netload 加载Countpdfpages.dll (适用于CAD 版本2013+)文件


(setq PDFFile (getfiled "Select the  PDF" "" "PDF" 2))
(setq num (Countpdfpages PDFFile))  ;读取pdf页码函数,使用的的c#搞的内库,非纯lisp语言。

注意事项
1、itextsharp.dll文件不能移动,如果移动位置都必须和Countpdfpages.dll在一个文件夹下。
[hide]
c#代码 高手看来小儿科,不过c#学了点皮毛仅能结合lisp使用
希望c#大佬多发点实用的内库函数来用用。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 2明经币 +2 收起 理由
szhorse + 1 非常给力!
菜鸟初来乍到 + 1 很给力!

查看全部评分

发表于 2024-11-25 11:04:30 | 显示全部楼层
本帖最后由 moshouhot 于 2024-11-25 15:06 编辑

[quote]moshouhot 发表于 2024-6-5 13:21
请问在不实际插入PDF的情况下,能否提前获取到PDF的第一页的尺寸。



  1. using iText.Kernel.Pdf;

  2. namespace aaAcad;

  3. public class Mylisphelper {

  4.     /// <summary>
  5.     /// 获取指定PDF文件的总页数
  6.     /// </summary>
  7.     /// <param name="rb">LISP参数缓冲区,需要包含一个TypeCode为5005的字符串类型参数,表示PDF文件路径</param>
  8.     /// <returns>
  9.     /// 返回值说明:
  10.     /// - 如果成功读取PDF,返回PDF的总页数
  11.     /// - 如果发生以下情况则返回0:
  12.     ///   1. 输入参数为null
  13.     ///   2. 参数格式不正确
  14.     ///   3. 指定的文件不存在
  15.     /// </returns>
  16.     /// <remarks>
  17.     /// 此方法通过AutoCAD LISP接口调用,用于获取PDF文件的页数。
  18.     /// 当文件不存在时会显示提示消息框。
  19.     /// </remarks>
  20.     /// <example>
  21.     /// LISP调用示例:
  22.     /// (Countpdfpages "C:\\example.pdf")
  23.     /// </example>
  24.     [LispFunction("Countpdfpages")]
  25.     public int Countpdfpages(ResultBuffer rb) {
  26.         int result = 0;
  27.         if (rb == null) {
  28.             return 0;
  29.         }

  30.         TypedValue[] array = rb.AsArray();
  31.         if (array.Length == 1 && array[0].TypeCode == 5005) {
  32.             string filePath = array[0].Value as string;
  33.             if (File.Exists(filePath)) {
  34.                 using (var pdfReader = new PdfReader(filePath))
  35.                 using (var pdfDoc = new PdfDocument(pdfReader)) {
  36.                     result = pdfDoc.GetNumberOfPages();
  37.                 }
  38.             } else {
  39.                 result = 0;
  40.                 MessageBox.Show("么有文件");
  41.             }
  42.         }
  43.         return result;
  44.     }

  45.     /// <summary>
  46.     /// 获取PDF文件首页的尺寸(宽度和高度,单位:毫米)
  47.     /// </summary>
  48.     /// <param name="rb">LISP参数缓冲区,需要包含一个TypeCode为5005的字符串类型参数,表示PDF文件路径</param>
  49.     /// <returns>
  50.     /// 返回值说明:
  51.     /// - 如果成功读取PDF,返回包含两个浮点数的ResultBuffer,分别表示宽度和高度(毫米)
  52.     /// - 如果发生以下情况则返回null:
  53.     ///   1. 输入参数为null
  54.     ///   2. 参数格式不正确
  55.     ///   3. 指定的文件不存在
  56.     ///   4. PDF文件读取失败
  57.     /// </returns>
  58.     /// <remarks>
  59.     /// 此方法通过AutoCAD LISP接口调用,用于获取PDF文件首页的尺寸。
  60.     /// 当文件不存在时会显示提示消息框。
  61.     /// 返回的尺寸基于PDF的MediaBox,单位转换为毫米。
  62.     /// </remarks>
  63.     /// <example>
  64.     /// LISP调用示例:
  65.     /// (getpdfsize "C:\\example.pdf")
  66.     /// 返回格式: (宽度 高度) ;单位:毫米
  67.     /// </example>
  68.     [LispFunction("getpdfsize")]
  69.     public ResultBuffer GetPdfSize(ResultBuffer rb) {        

  70.         if (rb == null) {
  71.             Env.Print("\n输入参数为null");
  72.             return null;
  73.         }

  74.         TypedValue[] array = rb.AsArray();
  75.         if (array.Length != 1 || array[0].TypeCode != 5005) {
  76.             Env.Print("\n参数格式不正确");
  77.             return null;
  78.         }

  79.         string filePath = array[0].Value as string;
  80.         // Env.Print($"\n文件路径: {filePath}");

  81.         if (!File.Exists(filePath)) {
  82.             Env.Print("\n文件不存在");
  83.             // MessageBox.Show("么有文件");
  84.             return null;
  85.         }

  86.         try {
  87.             using (var pdfReader = new PdfReader(filePath))
  88.             using (var pdfDoc = new PdfDocument(pdfReader)) {
  89.                 var page = pdfDoc.GetPage(1);
  90.                 // Env.Print("\n成功读取PDF第一页");

  91.                 // 优先使用CropBox,如果不存在则使用MediaBox
  92.                 var pageSize = page.GetCropBox() ?? page.GetMediaBox();

  93.                 const double POINTS_TO_MM = 0.352778;
  94.                 double width = pageSize.GetWidth() * POINTS_TO_MM;
  95.                 double height = pageSize.GetHeight() * POINTS_TO_MM;

  96.                 // Env.Print($"\n尺寸: {width}mm x {height}mm");

  97.                                 return new ResultBuffer(
  98.                                         new TypedValue(5001, width),    // 包装在TypedValue中
  99.                                         new TypedValue(5001, height)
  100.                                 );
  101.             }
  102.         } catch (Exception ex) {
  103.             Env.Print($"\n读取PDF文件失败: {ex.Message}");
  104.             // MessageBox.Show($"读取PDF文件失败: {ex.Message}");
  105.             return null;
  106.         }
  107.     }
  108. }


时隔半年,穿越过来回答我自己的问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-28 22:25:02 | 显示全部楼层
hower 发表于 2023-8-28 20:24
CAD2020使用这个插件,显示错误: no function definition: COUNTPDFPAGES,这个怎么处理咧

命令行输入:netload 加载Countpdfpages.dll 文件(适用于CAD 版本2013+)
 楼主| 发表于 2023-8-25 20:31:33 | 显示全部楼层
树櫴希德 发表于 2023-8-25 17:06
2018版本的pdf转cad能套出函数吗

可以的。            14版本的cad都可以插入PDF进去。刚刚测试了的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2023-8-24 17:11:08 | 显示全部楼层
就是多页pdf插入cad么?
大佬高产了,谢谢分享。
 楼主| 发表于 2023-8-24 17:35:21 | 显示全部楼层
lxl217114 发表于 2023-8-24 17:11
就是多页pdf插入cad么?
大佬高产了,谢谢分享。

是的,按默认尺寸插入的和插入光栅差不多
发表于 2023-8-24 17:41:34 | 显示全部楼层
jun353835273 发表于 2023-8-24 17:35
是的,按默认尺寸插入的和插入光栅差不多

好工具,那弥补了pdfimport只能输入1P的缺陷。
发表于 2023-8-24 18:57:58 | 显示全部楼层
又一个好工具,,,
发表于 2023-8-24 19:17:03 | 显示全部楼层
对图形插入的效果如何?能像pdfimport一样吗?
发表于 2023-8-24 19:31:31 | 显示全部楼层
1111111111111
发表于 2023-8-24 19:46:46 | 显示全部楼层
好东西  学习学习
发表于 2023-8-24 20:19:07 | 显示全部楼层
感谢大佬分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-23 00:40 , Processed in 0.227038 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表