|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑
- M& _1 ?: p9 F" ^# E z7 o- f4 r9 N8 W: w
版主及各位朋友:中午好!$ ^$ k7 W, H& ]- a5 N, [4 {1 K! \
/ n+ P% P* x* \1 o+ q2 F: B CAD版本:AutoCAD Electrical 2010) P& I, a5 X# l% Y, ^' ]
0 Y% H) ^* {/ s1 g
我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!
1 }9 ^7 G; J& p 问题如下:* E+ ~/ k! A% x+ G
我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3 打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。+ i6 o$ g, b) M- |2 G4 X
( \9 }/ m4 t& {& z7 p. J
上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题。
2 D5 E1 o x) ?) J: M5 k
+ W D; {6 p4 W( ?8 l5 e: U" m 后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。
' z% z! x( G2 m- n8 \% } 尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)
5 S) R: w$ M$ Z& f: E+ g9 Z) V- U" k7 p
问题汇总:- Q" G4 K# O, z5 R, f
1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?1 ~5 H1 S( w2 ?/ |: x# H
2、 “Adobe PDF” 打印机如何设置字体? L7 n. U( e8 ^0 _4 X' h# P0 g
注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。- '---------------------------------------------------------------------------------------
' f% |5 Y5 s+ W4 Y - ' Procedure : CreatePDF& `: @6 y1 T& I! w$ s- q( Y; ?( ^
- ' DateTime : 2013-11-20
0 Q) m) f& |( o: `6 q# Z, Q' z - ' Author : xwang
8 Q8 d5 E! b: O - ' Purpose : CAD中DWG图纸导出PDF文件
0 E: W" X$ i! w' ?1 N( @- E - ' param : acadDoc: AcadDocument
7 i& m; L- g( W0 X6 F9 A* R) W - ' : filename: DWGFile
- K) d" R' `+ t# ?7 Q0 B - ' : strPdfFile PdfFile8 d. H4 S5 J1 \0 t6 _
- ' : ConfigName: Acade - DWG To PDF.pc3# j& k* F$ D9 _! o
- '---------------------------------------------------------------------------------------- |! Q# Z: [% Z: ^* h# G9 v$ y6 q
- Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer
. ^7 Y1 X- k- O! \2 ~ - 6 ]+ p) e& f" E0 N- p, q. H$ R: S/ q
- Dim PtConfigs As AcadPlotConfigurations
+ l( p6 c5 e+ R. L7 K* M - Dim PlotConfig As AcadPlotConfiguration
- u; u- U* {+ i; W s+ B - Dim PtObj As AcadPlot8 a; W( z2 Y( K2 i4 x
- Dim BackPlot As Variant: x+ a1 B) c c; x
- # g, l6 d2 n3 m3 S
- Dim ent As AcadEntity 'Object
8 y5 \( f" C2 e& p% e$ ~9 A1 L - Dim blockRef As AcadBlockReference+ r v' T2 j o0 m$ ~
-
w- e: d7 o9 q+ F - On Error GoTo ErrExit
0 d( @, A- r' `+ ` - . h5 X5 f' `( |9 l" q' U
- Debug.Print "CreatePDF ------------------------------------------------->"
# W4 n; f7 y& L: Y% V - Debug.Print "打印机:" & ConfigName
|+ P7 n; W! H2 b" w- t; [7 g; O - For Each ent In acadDoc.ModelSpace
% ^" T: e$ |& m - If TypeOf ent Is AcadBlockReference Then, Z8 S: T1 @! I4 G. a
- DoEvents
( T' Q. D. I/ j# c - Set blockRef = ent
5 ?% T! N9 r' u6 ]. p - If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then
L) q- ]! A, `/ O2 M, o1 ] - - |, D2 e1 D! |
- Debug.Print "块名称:" & blockRef.Name
# B9 c+ ?; c3 I& C - 2 O4 o$ W, G* d+ \$ Q5 M$ Z
- '块引用的插入点
: {; q9 u9 S9 C: ^0 A, Q. b& Y - Dim insertPoint As Variant
" |6 C& y7 v% p - insertPoint = blockRef.InsertionPoint
/ f0 x6 F3 l" G: W$ y - '放大比例
* [. ?# |2 o' I2 y% N$ K+ q - Dim xScale, yScale As Integer
9 A& G3 ~- W) j& H, k3 \ - xScale = blockRef.XScaleFactor r9 J; N- J1 Q% ?* k; y; w
- yScale = blockRef.YScaleFactor
8 d) Z# q* _2 U, ` - % S" B9 E6 A6 c, Y! C8 F1 @0 r
- acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"( i1 Z3 Y9 {3 ^ ^: q1 R
- Set PtObj = acadDoc.Plot
* ?+ j% N+ r9 p" v4 T - Set PtConfigs = acadDoc.PlotConfigurations
, M5 }+ H0 S! d1 w/ n: M) H - * N0 J: l. K/ ?4 L2 h
- PtConfigs.Add "PDF", False7 G( C: _5 ~+ z+ C/ f/ D L0 V
- Set PlotConfig = PtConfigs.Item("PDF")
9 s& w( Q- F* c& f( b - PlotConfig.StandardScale = acScaleToFit4 X% z! o& [. i \
-
, B, H, @% k" o! b( G - PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"& P4 h8 P! a" C! `+ S. P
- 'ANSI_A_(8.50_x_11.00_Inches); ~- k& ~& F" N; B3 A# _
- PlotConfig.RefreshPlotDeviceInfo
2 }% `8 E1 K5 l
0 i J, |0 k; p& p- [: L. r+ C- Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet$ k9 t" i- L, r/ j& f. H. n z
- Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
/ f7 @* m! z1 j5 e- {) N0 W - 2 G" z7 M; B( R% [* d) L
- acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式
^# x% i' v7 ?/ r
9 i: m# e/ [( _/ X& |- '使用图形文件的线宽; B$ X0 S% L% @0 a& ^
- PlotConfig.PlotWithLineweights = True! p5 _: E4 F+ ~7 W+ t5 a
- '是否启用打印样式
" ^0 f5 r1 V! T8 ~& V9 j - PlotConfig.PlotWithPlotStyles = True
+ H m7 d& N# g7 h/ z1 Z3 T
5 _9 u! ^1 @9 X }. B6 o- Y- '宽高基数
: _5 P) ^' Z+ Q# n; M0 s3 O - Dim width, height As Double
! l9 `6 b+ f/ Y3 N( A) W/ i% E! F - If blockRef.Name = "ACE A3块" Then/ p6 a# [7 a# [
- width = 4200 o7 B" u2 S7 N: g+ s$ X5 [6 `- c4 m
- height = 297
9 X1 W6 j+ @$ d7 E( W# E. h - acadDoc.ActiveLayout.PlotRotation = ac90degrees: g$ y& ~9 p' L3 R q' N
- acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"
% I4 o9 h' {! @" m7 B5 |7 X- N - ElseIf blockRef.Name = "ACE A4块" Then
$ D: z, j. K J8 u: b - width = 210
. S+ q" H. K4 C5 _2 ~8 `; T3 [( V& i - height = 297- X, x2 x4 Z- A5 m* L# d3 o
- acadDoc.ActiveLayout.PlotRotation = ac0degrees
. z' T7 U5 L. f) U/ E! j$ X - acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"
( Z$ l# p% }! S - End If' S3 Z( ]' g* w% p
- 8 g3 G* c) t8 T( F( F* E
- '打印区域
- t: [8 ]3 B) g - Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double
2 \% ?! V! \1 c. M8 F - LowerLeft(0) = insertPoint(0)
# ^" ^. g2 T$ H! a9 t - LowerLeft(1) = insertPoint(1)4 {8 q6 X, ^5 ] t3 r4 C
- UpperRight(0) = insertPoint(0) + width * xScale4 n( E0 C" s, M& h# x! _% t. C
- UpperRight(1) = insertPoint(1) + height * yScale
3 G3 \2 [6 k4 j+ X& g - ( r0 m, Q7 u8 B8 x4 x: n
- '设置定义要打印的布局范围的坐标
! u% Q: Y8 [6 O1 `3 h - acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight
: v/ G& W6 m2 J$ x - '指定布局或打印配置的类型
1 C& [2 b1 Y: k* a7 ` - acadDoc.ActiveLayout.PlotType = acExtents; i" [) O h" i/ }& g8 d
-
$ o: _0 t( w4 J/ e: E - BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT")7 Y% J$ d+ Z2 e
- acadDoc.SetVariable "BACKGROUNDPLOT", 0
, {& V( B$ h7 \: } - PlotConfig.RefreshPlotDeviceInfo
/ z+ r: B# U: u -
# P2 F+ b# i9 ^. p* @( a2 J - Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet
( }* H8 V3 Y& }4 Y6 K( L - Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName) Z: z4 j* c* u4 A+ k
- Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation
7 u) j* \7 y( F. j2 w- ^, d - Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName
& G# g) R% F i- D$ e& _ -
2 J' S$ Q. N y* ] - strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")
& n" V5 F% K8 u) |5 c+ N - Debug.Print "输出位置:" & strPdfFile
7 N- d! V2 W# T& @$ @( R8 F - : W2 E6 k) r' F# d P; O' q
- 'Now you can use the PlotTofile method
) K/ l3 x4 Z9 ^: { - If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then
/ z/ U2 E) ~% M; b! O, { M) |& _ - Debug.Print "PDF Was Created"+ \! N8 N \+ M& g
- Debug.Print "PDF Was Created"# O1 U0 I; {7 x
- Else: b% f9 _ s( l5 T+ b7 _
- Debug.Print "PDF Creation Unsuccessful!"
0 ~+ Q& v) ?7 u0 K7 G3 T7 M( G - Debug.Print "PDF Creation Unsuccessful!"9 @2 ^1 g0 B" ~- V) q+ o h
- End If+ y" ?5 Q8 ?; z' q
- PtConfigs.Item("PDF").Delete
9 {; J6 J2 z0 x, U; y - Set PlotConfig = Nothing
2 O- t: N0 Q0 Z5 z - acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot
9 `7 ^. i. s; X' {# c - ( V l2 V* G! Q- x, }3 V# b8 L5 K! Q
- Debug.Print "CreatePDF ok!"
( `0 d9 @5 i9 t1 {0 ` - End If A! S$ d! j6 V7 I0 N9 M1 ?$ |6 z
- End If
}1 a. H/ |- z - DoEvents! P) A! q! @9 k1 J y/ ]5 R3 p
- Next ent' k8 h! s5 c- b
- Debug.Print "CreatePDF -------------------------------------------------<"8 u: j$ ^9 X1 B5 E! V" @# @
- Exit Function
4 Z4 |5 C! [& [) g8 `3 v -
. K& w: w7 x& Y" z# h0 K* m - ErrExit:
1 v) d8 o7 h; q7 a, s$ X - CreatePDF2 = -1
* g1 W0 E$ _, J$ c7 z - Debug.Print "CreatePDF Error:" & Err.Description3 Q/ G. V! u% _. h( a: B
- MsgBox "CreatePDF error:" & Err.Description# C6 t& `& S v# J9 m; ^
- End Function
复制代码 |
-
|