如何以编程方式编辑 AutoCAD PC3 文件
How to edit an AutoCAD PC3 file programmatically
我希望能够在 AutoCAD 中向用户的 "DWG to PDF" PC3 文件添加更多 default/custom 纸张尺寸,(或者至少能够阅读它)但唯一的方法似乎是使用 AutoCAD 提供的界面。我知道 PC3 文件的位置,但是当我使用记事本之类的工具打开其中一个文件时,它似乎被压缩了。我希望能够使用 Visual Studio/VB.NET 向它们添加内容。必须有一种以编程方式执行此操作的方法。
文件的 header 表示:PIAFILEVERSION_2.0,PC3VER1,compress
遗憾的是我们没有publicAPI修改PC3文件。
这似乎是不可能的,所以我研究了 "printing" 到 PDF 文件的其他选项。 Microsoft 在打印机选择下拉列表中有一个名为 Microsoft Print to PDF 的选项,它也可用于完成自定义纸张尺寸,而无需修改 PC3 文件。可以通过编程方式将自定义纸张尺寸添加到基础文件中,但这有点复杂,涉及读取注册表,以及 reading/writing 到系统假脱机文件夹,其中一个文件(XML 文件)需要保存为UTF8 No BOM格式。
我不想剽窃别人的作品,也不想重新创建如此复杂的内容 answer/solution,因此我会将此 link 提供给 Microsoft 答案论坛以防其他人对解决方案感兴趣:
有一个很好的解决方案,可以更改打印机配置路径的首选项,并让 cad 像那样搜索您的文件。不要忘记在您的新 pc3 文件中取消附加 pm 文件并在同一文件夹中创建一个新文件
Public Sub Plot()
Dim Ov As String, Nv As String
Ov = CdApp.Preferences.Files.PrinterConfigPath '' this is the old location
Nv = Application.StartupPath
CdApp.Preferences.Files.PrinterConfigPath = Nv '' this is the new location
Dim Lw(0 To 1) As Double, Up(0 To 1) As Double
Lw(0) = -0.5 : Lw(1) = -0.5 : Up(0) = 1 : Up(1) = 1
CdDoc.ActiveLayout.SetWindowToPlot(Lw, Up)
CdDoc.ActiveLayout.CenterPlot = True
'CdDoc.ActiveLayout.RefreshPlotDeviceInfo()
CdDoc.ActiveLayout.ConfigName = "Boules JPG.pc3" ''this is the file that i make
CdDoc.ActiveLayout.CanonicalMediaName = "UserDefinedRaster (1600.00 x 1600.00Pixels)"
CdDoc.ActiveLayout.PlotRotation = AutoCAD.AcPlotRotation.ac0degrees
CdDoc.ActiveLayout.PaperUnits = AutoCAD.AcPlotPaperUnits.acPixels
CdDoc.ActiveLayout.PlotType = AutoCAD.AcPlotType.acWindow
CdDoc.ActiveLayout.PlotWithLineweights = False
CdDoc.ActiveLayout.PlotWithPlotStyles = False
CdDoc.ActiveLayout.ScaleLineweights = False
CdDoc.ActiveLayout.ShowPlotStyles = False
CdDoc.ActiveLayout.StandardScale = AutoCAD.AcPlotScale.acScaleToFit
CdDoc.ActiveLayout.UseStandardScale = True
CdDoc.SetVariable("BACKGROUNDPLOT", 0)
Dim fil_jpg As String = Application.StartupPath & "\" & "Boules2.jpg"
CdDoc.Plot.PlotToFile(fil_jpg)
CdApp.Preferences.Files.PrinterConfigPath = Ov '' return the value to old location
End Sub
我希望能够在 AutoCAD 中向用户的 "DWG to PDF" PC3 文件添加更多 default/custom 纸张尺寸,(或者至少能够阅读它)但唯一的方法似乎是使用 AutoCAD 提供的界面。我知道 PC3 文件的位置,但是当我使用记事本之类的工具打开其中一个文件时,它似乎被压缩了。我希望能够使用 Visual Studio/VB.NET 向它们添加内容。必须有一种以编程方式执行此操作的方法。
文件的 header 表示:PIAFILEVERSION_2.0,PC3VER1,compress
遗憾的是我们没有publicAPI修改PC3文件。
这似乎是不可能的,所以我研究了 "printing" 到 PDF 文件的其他选项。 Microsoft 在打印机选择下拉列表中有一个名为 Microsoft Print to PDF 的选项,它也可用于完成自定义纸张尺寸,而无需修改 PC3 文件。可以通过编程方式将自定义纸张尺寸添加到基础文件中,但这有点复杂,涉及读取注册表,以及 reading/writing 到系统假脱机文件夹,其中一个文件(XML 文件)需要保存为UTF8 No BOM格式。
我不想剽窃别人的作品,也不想重新创建如此复杂的内容 answer/solution,因此我会将此 link 提供给 Microsoft 答案论坛以防其他人对解决方案感兴趣:
有一个很好的解决方案,可以更改打印机配置路径的首选项,并让 cad 像那样搜索您的文件。不要忘记在您的新 pc3 文件中取消附加 pm 文件并在同一文件夹中创建一个新文件
Public Sub Plot()
Dim Ov As String, Nv As String
Ov = CdApp.Preferences.Files.PrinterConfigPath '' this is the old location
Nv = Application.StartupPath
CdApp.Preferences.Files.PrinterConfigPath = Nv '' this is the new location
Dim Lw(0 To 1) As Double, Up(0 To 1) As Double
Lw(0) = -0.5 : Lw(1) = -0.5 : Up(0) = 1 : Up(1) = 1
CdDoc.ActiveLayout.SetWindowToPlot(Lw, Up)
CdDoc.ActiveLayout.CenterPlot = True
'CdDoc.ActiveLayout.RefreshPlotDeviceInfo()
CdDoc.ActiveLayout.ConfigName = "Boules JPG.pc3" ''this is the file that i make
CdDoc.ActiveLayout.CanonicalMediaName = "UserDefinedRaster (1600.00 x 1600.00Pixels)"
CdDoc.ActiveLayout.PlotRotation = AutoCAD.AcPlotRotation.ac0degrees
CdDoc.ActiveLayout.PaperUnits = AutoCAD.AcPlotPaperUnits.acPixels
CdDoc.ActiveLayout.PlotType = AutoCAD.AcPlotType.acWindow
CdDoc.ActiveLayout.PlotWithLineweights = False
CdDoc.ActiveLayout.PlotWithPlotStyles = False
CdDoc.ActiveLayout.ScaleLineweights = False
CdDoc.ActiveLayout.ShowPlotStyles = False
CdDoc.ActiveLayout.StandardScale = AutoCAD.AcPlotScale.acScaleToFit
CdDoc.ActiveLayout.UseStandardScale = True
CdDoc.SetVariable("BACKGROUNDPLOT", 0)
Dim fil_jpg As String = Application.StartupPath & "\" & "Boules2.jpg"
CdDoc.Plot.PlotToFile(fil_jpg)
CdApp.Preferences.Files.PrinterConfigPath = Ov '' return the value to old location
End Sub