|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑 9 n; Z7 T3 k. W2 Y
9 x3 o l* b. I/ W7 s, }版主及各位朋友:中午好!2 c3 Z( T+ K9 U) M" Z, g
/ [/ P% l# o# f7 }* y6 c CAD版本:AutoCAD Electrical 2010
. B- c; i+ y) q, C. s, Z/ U: N" @; g- |, ~5 T; k6 |
我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!
- J( b: ~. a4 R6 b 问题如下:
) A- \- B& c! \2 l/ F# V; D" \ 我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3 打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。3 \5 A8 m y# |
1 c4 b5 ^3 j6 g$ X) b) [5 w8 s+ I0 j 上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题。: S8 |0 Z# Q( `# l! n) m
' ?- w# F$ ]/ @) a4 r
后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。
" E. H5 d* ], d$ z; Y: n* ?0 e 尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)
, j9 G2 R5 S$ V" C
$ I" g( O( K9 ?. I8 B8 j t) O 问题汇总:
7 P V8 ^/ w+ G: J. @% B0 z 1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?/ r, T; {! w5 G6 I# r8 ?, O1 o
2、 “Adobe PDF” 打印机如何设置字体?+ u( e$ s$ g4 K
注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。- '---------------------------------------------------------------------------------------3 I/ E6 G# D5 D
- ' Procedure : CreatePDF
' r% P5 `9 \& o; L, J - ' DateTime : 2013-11-20, G8 B$ x* Y d4 {, P( {
- ' Author : xwang' v6 M/ W7 x5 W* i5 o2 w3 a
- ' Purpose : CAD中DWG图纸导出PDF文件
1 {% n( [. i7 a% y' v* Z' Q - ' param : acadDoc: AcadDocument
4 v/ h( D- w7 z - ' : filename: DWGFile( Y- e+ {; p& T R7 J! N, L
- ' : strPdfFile PdfFile9 O4 z, \5 c. k/ S
- ' : ConfigName: Acade - DWG To PDF.pc3
7 ^# A8 f1 g( d' I. [/ R9 v - '---------------------------------------------------------------------------------------: r# [" L' C8 K; y" y
- Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer
$ h7 F3 H; E% k3 X4 O, F6 s - U* P6 {4 g1 B. Z5 B- S s4 p. m
- Dim PtConfigs As AcadPlotConfigurations
7 x4 q. }8 g, ~$ T; L - Dim PlotConfig As AcadPlotConfiguration
0 a* j7 z$ b" h - Dim PtObj As AcadPlot
+ p3 E, V: f- R* |, M$ ~ - Dim BackPlot As Variant
) U" ]5 L; ?/ K N( X - ( T& B" S" A9 n* C- X6 f4 G j4 t
- Dim ent As AcadEntity 'Object/ t* }& q# Z# u/ D3 G) ~0 r5 @7 f
- Dim blockRef As AcadBlockReference1 ]/ a8 G3 q2 L6 H7 k4 S ]
- & U& \4 A- u% @" P
- On Error GoTo ErrExit" z1 v, m+ o0 W+ {
. Q2 ]0 f, }: z9 a4 S- Debug.Print "CreatePDF ------------------------------------------------->"
) n/ f% N+ X7 b" ^ ]; [ - Debug.Print "打印机:" & ConfigName
- A2 F7 ?1 a' d$ N' B, ^/ f - For Each ent In acadDoc.ModelSpace& Y7 q& ~4 y# g% Z" g
- If TypeOf ent Is AcadBlockReference Then4 c- O& a" s" H0 i3 M8 i& `( \% [
- DoEvents: c9 [, w9 t9 _* z+ P! j l& E
- Set blockRef = ent& C- e M: k) T0 f+ j
- If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then' N- ?1 u v6 S/ f
3 H$ ?- M, n1 ]; }0 H4 h- _- Debug.Print "块名称:" & blockRef.Name2 d4 o3 \" s- M
- ! {+ i, }$ z2 G2 q6 O
- '块引用的插入点
* w) z0 V9 I) d9 {1 b1 p k - Dim insertPoint As Variant) l, M9 V: h1 q. `
- insertPoint = blockRef.InsertionPoint2 w9 M3 B2 M {+ b, S
- '放大比例
2 C0 o4 {8 o* w* E- G$ M5 R' ^ - Dim xScale, yScale As Integer$ o. E4 s y* Z1 a I1 ^. O
- xScale = blockRef.XScaleFactor
, W7 I( W* L" e4 ^8 ]$ U( ^5 K - yScale = blockRef.YScaleFactor( s: }- d: f W' E1 S- l) p
- : f; _% j0 X: t1 S% C8 I
- acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"
. H# [, o5 r# `% g. @3 ` - Set PtObj = acadDoc.Plot
: t* l z% @+ H" Q: q" H, ] - Set PtConfigs = acadDoc.PlotConfigurations
' U9 W- T' l! b& G7 G
7 L! h- D6 M' L# O" Z) |- PtConfigs.Add "PDF", False; P/ Y1 e5 F2 ?9 X- m
- Set PlotConfig = PtConfigs.Item("PDF")
# q# |) @1 E5 O: ~: a, F - PlotConfig.StandardScale = acScaleToFit
. f2 ^ z, I4 _$ X% c -
& g0 B& c# h! A/ ^" q - PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"
: i9 w! w6 c0 S - 'ANSI_A_(8.50_x_11.00_Inches)9 J+ i+ D, z# Z: J! d% {; f3 ^$ H t
- PlotConfig.RefreshPlotDeviceInfo9 E; J: n: w6 m( [" J
$ e; c2 l% ?* B& x2 |; B2 q( T- Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet
, p1 D9 B& z {6 Q+ o/ E" Z: W ]( B - Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName# e8 n3 `) C4 B/ k, M7 ]+ c
-
% e* L$ _. O: _0 { - acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式+ H, s3 R8 s% P/ q" H
- 5 a& F- I7 R2 i' n; @! P: m( n
- '使用图形文件的线宽
: H0 U! j7 _' f! | I+ E! ?8 i - PlotConfig.PlotWithLineweights = True
& n$ n [' }+ q% b2 [5 B - '是否启用打印样式$ b5 R2 W7 c% y% ~
- PlotConfig.PlotWithPlotStyles = True
/ H2 a6 E" _$ z4 G& H" z$ q - / a4 e$ q! w( P& N7 o: S
- '宽高基数
+ T8 _3 d( l, |; x/ x2 L - Dim width, height As Double
) @- I! s6 k! H1 V1 C% S4 c7 d% v' z - If blockRef.Name = "ACE A3块" Then
9 Z7 [+ i9 m5 D7 y - width = 4201 w9 z7 K) E0 O
- height = 2979 Y3 }4 R1 E: h) Y) d' y
- acadDoc.ActiveLayout.PlotRotation = ac90degrees* I' \3 V5 K. c) s
- acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"
1 y4 ], {* G, M4 `3 J - ElseIf blockRef.Name = "ACE A4块" Then
2 g2 ^; _3 O3 }8 I* e - width = 210$ M6 s7 a6 o% J
- height = 297
6 {; C9 y; Y- p% w - acadDoc.ActiveLayout.PlotRotation = ac0degrees) h. \! h& f o# X" t+ [
- acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"3 i" e) z+ _( J9 r$ y7 G
- End If! i: t; m' L* Z: v
-
+ o+ _, T/ T5 p2 v0 L' I - '打印区域
7 U! o6 t3 b! g3 j* i4 s - Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double
, a* ]+ i$ Q9 g& j- ~ - LowerLeft(0) = insertPoint(0). k4 n5 t7 F. Q8 }, ]
- LowerLeft(1) = insertPoint(1)5 M. c; H, F5 H* Y
- UpperRight(0) = insertPoint(0) + width * xScale* G( _; X y7 L J
- UpperRight(1) = insertPoint(1) + height * yScale3 j5 q/ H4 n* S& Z5 }3 C
-
$ A' I1 {! W3 x" B3 b - '设置定义要打印的布局范围的坐标
- |9 r1 j! e$ c, p) @2 Y& z - acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight
/ p* @2 T& n8 J - '指定布局或打印配置的类型
7 l& O2 ]# i# @. m# f! U - acadDoc.ActiveLayout.PlotType = acExtents
- W: U( `9 m1 A; G -
7 u; ~; F' L/ N% f4 {; w - BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT")
% m, d+ s; W7 p6 h) l - acadDoc.SetVariable "BACKGROUNDPLOT", 0/ W( z! w& Y# I5 e* x
- PlotConfig.RefreshPlotDeviceInfo8 y& _" s [$ Z' o) e2 o- U
-
/ l% n5 f& F {- i, @; ^3 j0 M - Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet
4 _! n+ ?) T" V4 D" h2 S7 v1 G0 V - Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
5 y- p1 g! h% T0 Y" ]0 \ y4 l - Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation
! N/ F& z! u: d. t5 c6 X; n G - Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName
# I8 I% D, x; s: q& X1 Z - 2 w# q& |+ ]& y6 o2 T- T* r
- strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")6 t0 w. ~8 Y: l& M5 L0 D
- Debug.Print "输出位置:" & strPdfFile3 m- M8 D6 d6 D$ S
- 5 f- M) k d4 f! e, X! I$ c
- 'Now you can use the PlotTofile method% v5 O' [1 N, l, e. E3 c- c" {2 Q
- If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then
9 p* l5 c" e* o0 L - Debug.Print "PDF Was Created"' B: Y s: `% r0 c" ^) x, {
- Debug.Print "PDF Was Created"7 C x' }; O2 T& j2 Q; c$ K
- Else
8 l8 j8 M. c0 X - Debug.Print "PDF Creation Unsuccessful!"
9 B! b7 j9 h1 o7 n - Debug.Print "PDF Creation Unsuccessful!"% ~) w' {% A: ?8 D) \% x, `
- End If
5 ~ c, n# F7 F; Y$ O+ `' w) J - PtConfigs.Item("PDF").Delete
' q O( [" A0 n" ~% c - Set PlotConfig = Nothing
N( H3 l8 n) J! X - acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot' T9 i1 M9 I; w' M
- ' W) P& l. m! m& _
- Debug.Print "CreatePDF ok!"
; C3 S! x+ o2 b! H" v9 Y+ X! m - End If
9 g1 T2 l! w2 p* |# Z- H - End If2 X9 }1 T$ v: C+ T+ @& R7 T
- DoEvents
' w B4 r4 O( g v& z- h8 R - Next ent5 }- |, E4 o' L5 E+ \
- Debug.Print "CreatePDF -------------------------------------------------<"
+ f0 D9 I) \5 q1 K - Exit Function2 h; H- k) v6 s8 a
- 8 X @6 x3 q8 d$ q' H! [. @: R; Q
- ErrExit:
3 O: Q8 ]! S3 u/ [7 D/ C - CreatePDF2 = -14 ` m$ b* Z5 {% G0 e/ o0 X; N. P
- Debug.Print "CreatePDF Error:" & Err.Description; D! v$ G; Y9 z9 V5 i8 D
- MsgBox "CreatePDF error:" & Err.Description
" O6 |. T& U+ [ r3 Y - End Function
复制代码 |
-
|