如何批量打印所有的图纸为单独的pdf, 不要都在一个pdf文件里

我在Rhino里建了3个图纸,用的是Adobe PDF 打印机.

打印所有的图纸时, 系统默认将所有图纸打印到1个PDF里,文件名为当前rhino文件名称.

但是我想要的每个图纸都存为1个单独的PDF文件(文件名为图纸名称).

请问有没有方法可以做到? 谢谢帮助!

Hi,

Rhino 沒有這樣的列印功能,我把它加到 Wish list。
https://mcneel.myjetbrains.com/youtrack/issue/RH-37166

Wish 的實現緩不濟急,未來會不會真的加入 Rhino 也無以預知。目前請使用 PDFsam Basic 來處理,它提供許多 PDF 分割、合併功能,包括將一個 PDF 以頁面為單位分割為數個 PDF。

谢谢kelvin. PDF Split 和 Merge在adobe Acrobat里一样是可以实现的,问题就在文件命名上.
我们在rhino里建的每个Layout都有它独特的意义,他们的命名不一定是有规律的.
例如 Layout_1命名为平面图, Layout_2 命名为剖面图. 客户找我要剖面图的时候,我必须要从这个整合的PDF里把页面2提取出来,然后命名为剖面图. 或者我不在公司的时候,我的同事找不到剖面图的PDF在哪里.

但是非常感谢你把它加到wish单里,希望rhino6可以有.
目前我提议公司换掉AutoCad改用rhino,但是我必须要解决掉很多很基础的问题才有进一步的可能性.

@Jorin,Rhinoscript 做的到這個功能嗎?

不管是 Rhino 的其他 SDK 还是 RhinoScript 中都没有现成能够直接输出 PDF 的 API 和相关函数。自己写脚本或者插件去输出 PDF 并不是不能实现,只是非常有难度。

Adobe PDF 虚拟打印机是安装于 Rhino 之外的系统服务软件,而输出 PDF 的文件名称是由该软件读取当前文档的名称来决定的,Rhino 只是把它当作一个普通的打印机来使用,所以在 Rhino 中是无法定义该软件输出文件名的。

除非是 Rhino 自身拥有输出 PDF 文件的功能和插件,否则很难实现题主所说的功能。不知道 @Jessesn 了解不了解有没有这方面的插件?

@Jorin
Steve 說 Python script 現在有這樣的功能了。
https://mcneel.myjetbrains.com/youtrack/issue/RH-37166

而且,RhinoWIP 的 File > Save 儲存 PDF 已經不需要第三方廠商的 PDF Printer Driver 了。

请问这个Python script有已经写好的脚本可以使用吗?我不会写…
还有这个脚本是只可以在Rhino 6 上使用吗?我们公司目前都还在使用Rhino 5 Sr13.

對,目前的 RhinoWIP 與未來的 Rhino 6 才能使用。

我們的工程師 Steve 說他想寫一個此功能的 Python script。

這裡有程式碼範例,或許 @Jorin 看了就知道怎麼寫了。

Rhino 5看来已经是不可能有办法解决这个问题了,Rhino 6 什么时候能出来还是个未知数。
但是最少看到问题在Rhino 6 上已经被解决了。非常感谢!!!

我刚反应过来我是不是理解错了。您的意思是Rhino WIP V5 SR13 已经可以用Python Script来解决这个打印问了对吗?只是Script还得研究一下怎么写。

不是,我指的 RhinoWIP 是目前開發中的 Rhino 6,Rhino 5 SR13 不行,RhinoWIP 可以從這裡下載,需要填入 Rhino 5 的授權碼。將來 Rhino 6 正式版與目前的 RhinoWIP 差異可能沒有很大。

目前或下一個釋出的 RhinoWIP 的 RhinoPython 有提供這個功能需要的函數,但還要寫一個 Python Script 去呼叫才能實際使用,我們的工程師 Steve 說他有想要寫一個。

谢谢Kelvin,明白了。明天去公司问问IT部门的人可不可以告诉我授权码,然后测试测试Rhino 6。公司里用的Zoo。

不客氣,如果你們公司使用的 Zoo 無法輸入 RhinoWIP 的 RH6B 開頭的授權碼,請下載安裝 Zoo 6.0,原來在 Zoo 裡的授權碼不授影響。

https://wiki.mcneel.com/zoo/home

好的,谢谢您,回复的太详细了。

确实看了就知道怎么写了,按照楼主的要求,写了一个小脚本,运行这个脚本的前提是要在 C 盘根目录下先手动创建 pdf_output 文件夹,然后在 Rhino 6 WIP 中执行下列脚本,就可以将每一个图纸输出为单独的 PDF 文件了,文件名是图纸的名称:

import Rhino
import scriptcontext as sc
import System.Drawing
import rhinoscriptsyntax as rs

def createSinglePDF(view):
    pdf = Rhino.FileIO.FilePdf.Create()
    dpi = 300
    size = System.Drawing.Size(8.5*dpi,11*dpi)
    settings = Rhino.Display.ViewCaptureSettings(view, size, dpi)
    pdf.AddPage(settings)
    filename = 'c:/pdf_output/'+view.PageName+'.pdf'
    pdf.Write(filename)


for i in sc.doc.Views:
    if type(i) is Rhino.Display.RhinoPageView:
        createSinglePDF(i)

非常非常感谢Jorin, 已入GH大坑,现在我又好想继续跳入编程深坑啊。:joy:

Thanks, @Jorin.

@NingZZ, 請試試看 Jorin 的 python script 腳本。


RH6没办法执行这个脚本,可以请Jorin大大更新一下吗?

@Jorin

看起来像是 IronPython 出问题了,请问你可以执行其他的 Python 脚本吗?
比如你先执行下面的语句试试:
import rhinoscriptsyntax as rs
print (rs)