|
|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑
7 W' K- R) U/ g% U/ R0 O L9 y5 v+ N; z9 h' p2 _
版主及各位朋友:中午好!
% L7 E# j8 \8 }' @
( \& c' @0 U+ K% Q J" g$ p# f3 d CAD版本:AutoCAD Electrical 2010
+ X2 y1 r6 L5 E" f4 m' F8 m5 v
1 I' a) A; T: s& ~ 我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!" a! Q/ k0 E9 \
问题如下:
+ A) W1 e2 E6 R" { 我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3 打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。" f# _; z6 y9 I5 g. l3 I. }
4 T9 |' u" W6 j! w( a9 u 上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题。
% H% o; R e8 U1 R5 `. ^" N6 z: B
, g% ~. ]/ q; T$ d( v/ ]3 f; W 后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。
$ }8 ]. {# y+ g( r3 A 尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)( u" b+ r, t( k- C/ x7 y. ^8 y/ ^
( d* d i$ O5 F3 X0 o& S7 Z 问题汇总:7 h5 W: H _ {
1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?
9 u( x# _2 S& w3 r 2、 “Adobe PDF” 打印机如何设置字体?' P- A1 g. d- H- b: z3 k
注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。- '---------------------------------------------------------------------------------------
# ~& I4 \4 B9 J3 L; K) y - ' Procedure : CreatePDF
' \2 B* W1 ]4 [+ Z! ]$ r7 ~ - ' DateTime : 2013-11-20
7 z7 J0 E& u k" B0 \" t) J - ' Author : xwang
, }( v' }. [% k# y. w4 e - ' Purpose : CAD中DWG图纸导出PDF文件( n4 u8 i$ C$ o& F; f/ M: k
- ' param : acadDoc: AcadDocument
$ |8 w n! }* @& E, C4 E$ H3 \. @ - ' : filename: DWGFile2 n2 j. y/ K/ v# O5 S
- ' : strPdfFile PdfFile
# e4 ]; V3 D) g! S$ _+ B - ' : ConfigName: Acade - DWG To PDF.pc3
0 B1 q# _+ E4 n! W7 o - '---------------------------------------------------------------------------------------
, H+ n) q' N* o4 u6 _ - Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer
$ R) t: K4 s5 k2 w. X
/ a. f( t7 ?( u) i% ~( b- Dim PtConfigs As AcadPlotConfigurations
) l% |; ]# x0 y4 v2 _+ b2 W, S - Dim PlotConfig As AcadPlotConfiguration
+ a& Z4 o) g0 N, f9 F' }8 @$ V - Dim PtObj As AcadPlot+ M$ i" `' K8 u6 p
- Dim BackPlot As Variant: f9 X* K0 F1 ?# y g& h6 A& y) c+ M
- & h5 r" k" S3 \ F+ N. B% z
- Dim ent As AcadEntity 'Object
5 J7 Y; `" E! X8 [: Y - Dim blockRef As AcadBlockReference7 `) |/ d8 b. w. i. j
-
: |; [5 e g1 [1 ^, u - On Error GoTo ErrExit
+ V. I0 f! u7 f* J
4 {! _( @ M5 @% b8 g% T8 S) u9 C7 S- Debug.Print "CreatePDF ------------------------------------------------->"4 ~/ O5 U- B- G, H$ N) |
- Debug.Print "打印机:" & ConfigName
2 M! q0 H7 Z/ [2 D5 ~( W7 B - For Each ent In acadDoc.ModelSpace
9 _2 g+ z5 j% \" n- V& K - If TypeOf ent Is AcadBlockReference Then
+ _ N, k2 `- A8 c! q' Q - DoEvents/ a( N& x7 [' }8 ~7 ]; I2 K- z
- Set blockRef = ent6 ~; _$ T, x% T$ o4 C+ e# e& c
- If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then4 _7 T# d2 k( ]+ V
) B- f+ A+ _. a$ M" y; w8 h! B9 z- Debug.Print "块名称:" & blockRef.Name. u8 W7 l+ b" J/ [6 |3 K; ^
-
0 n. {" @' J/ ]/ e( ]3 e' A+ t - '块引用的插入点) a( j6 ?7 ]; Q/ |# h0 P
- Dim insertPoint As Variant- H `" q: E, S5 W
- insertPoint = blockRef.InsertionPoint
. { E+ {+ n3 \8 Y" l) r& P, F - '放大比例
4 y$ I+ S ] W - Dim xScale, yScale As Integer& ]3 M, @1 d' f- A9 h- R/ b4 Q/ Q: ~
- xScale = blockRef.XScaleFactor( X& j) G0 U5 \$ h v# u% m& U" `
- yScale = blockRef.YScaleFactor$ l2 G2 |# M9 D5 H7 X5 h2 s
-
! z; Q' Y r' p: r9 _/ F - acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"
9 f9 q4 n; d: K% `) e* n- c) ~2 Z# Y. } - Set PtObj = acadDoc.Plot
# `, e' {* K% i$ [& [ p1 z - Set PtConfigs = acadDoc.PlotConfigurations( ]2 e7 ?- `% f5 x0 B
, d' `* P4 O4 e" o$ V s- PtConfigs.Add "PDF", False
% B- `4 g7 s( S5 D. k s m - Set PlotConfig = PtConfigs.Item("PDF")' }* d4 }% r5 H/ N7 Z3 v# x/ k
- PlotConfig.StandardScale = acScaleToFit# Z: P. {3 w: w7 r0 ^. l5 D! s, o& p9 g
- # O9 ^( y* g& H. z2 G9 m
- PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"& l. U' y- U/ F: [' Y
- 'ANSI_A_(8.50_x_11.00_Inches)) ~* i# K) `8 O8 ?) ]+ |
- PlotConfig.RefreshPlotDeviceInfo+ y6 Z, g5 j6 \8 O
' U1 O, w. R" u4 f' _8 b- Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet3 s' a; x0 R1 p* n( d
- Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
|8 p- p& z; F0 f1 M2 Q3 U -
; _- W; W2 q8 P1 K* l2 G' k - acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式 p2 P8 E9 Z3 g7 h- s8 y4 C
- 5 i& A9 _7 \8 @" s/ }$ Z
- '使用图形文件的线宽2 J$ M' @ N5 ~$ U4 d# _. j- \3 B+ S
- PlotConfig.PlotWithLineweights = True
: x+ T( I* P/ w. a4 [9 u - '是否启用打印样式
- ?6 o) D' e4 @$ x' E8 U( C/ S - PlotConfig.PlotWithPlotStyles = True
' q8 X$ V* g5 F8 ?/ B2 }! g$ @
# ^6 k" a* j0 b7 [. p: u8 r' g- '宽高基数
/ w8 s5 G; X* U - Dim width, height As Double
+ s/ g- u8 ?& T - If blockRef.Name = "ACE A3块" Then
* V3 a( A" x: h. W: ] {, u - width = 420
) q, R, k' u) d1 J* S1 j3 ]; ` - height = 297
- x/ M9 b' r& y9 ~1 o - acadDoc.ActiveLayout.PlotRotation = ac90degrees
/ C! F+ S; {; I5 E! E9 b - acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"
1 ]- g1 `5 X0 h8 M) x8 m8 ^. x - ElseIf blockRef.Name = "ACE A4块" Then
, a, w( }# z3 s) \/ d4 U - width = 2100 v5 f6 X" A7 }+ @7 O0 t; }+ n4 p+ G e
- height = 297
: o# i3 f, `, |; U6 ~( k# z- a - acadDoc.ActiveLayout.PlotRotation = ac0degrees
, O/ ~, @- `' v2 M+ U - acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"$ b$ p% I, U1 U7 e# s: k: z% ~
- End If0 `! o) D8 r/ Z3 r2 l. T
- 3 n* n! M- e3 t! f* s* y7 @4 i
- '打印区域/ ~- b- j# m0 f; ?7 x& N: P
- Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double4 Q/ c4 M7 f/ o1 P# I# f
- LowerLeft(0) = insertPoint(0)1 P* ^: @; c P% [
- LowerLeft(1) = insertPoint(1)
$ T9 i1 D4 r5 E' q' U( g2 M" N - UpperRight(0) = insertPoint(0) + width * xScale
, Q, n f ]7 D, B8 {/ i+ b; z0 [: h8 _ - UpperRight(1) = insertPoint(1) + height * yScale
8 b# o/ F; \/ B8 j x! f8 k7 K -
- z5 v2 b( q5 W6 R) F4 B' m - '设置定义要打印的布局范围的坐标
+ N7 d% O J1 l% Z1 J1 y" _ - acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight7 G* z7 } d( Q
- '指定布局或打印配置的类型
1 Y- ?6 O- M7 Y: l) A# i# d - acadDoc.ActiveLayout.PlotType = acExtents
% e x8 z' y; ` - % m0 w- @7 j. N% h9 J! z2 P. K
- BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT")- R0 H: i4 v2 F! H8 _' w/ o' j
- acadDoc.SetVariable "BACKGROUNDPLOT", 0
7 f' y# \, Y$ x. e9 Z/ _ - PlotConfig.RefreshPlotDeviceInfo
+ T$ O; C. Q3 s1 k5 z$ m - 9 x# O+ G4 L0 b4 x: l. _
- Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet v) `. e) J* g. I7 v
- Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName- m$ t9 x% z! N, [4 {$ w+ A
- Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation
0 _. d3 o) b1 h9 M) |- I: O) p& H - Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName4 l9 Z, U4 t( O( N2 M( S
- . L* s: a1 V& c6 b' L
- strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")
. n3 i1 [0 p0 v8 X% P: U( c( M - Debug.Print "输出位置:" & strPdfFile
9 c+ H/ [- S5 P) a7 e6 I3 i5 g
. w# r/ q3 R$ N+ e5 ~+ L4 z- 'Now you can use the PlotTofile method
* {) k' s! M2 t - If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then% u) P0 h2 g4 t; w
- Debug.Print "PDF Was Created"
S6 d- ?3 c* T. T+ j+ B. Z - Debug.Print "PDF Was Created"8 L- P% k" }" H' {0 V
- Else
7 f3 t% t. `$ l - Debug.Print "PDF Creation Unsuccessful!"! ^# F4 |0 z3 _2 z
- Debug.Print "PDF Creation Unsuccessful!"
2 l# ~9 e0 M7 W - End If, X6 C2 u, x: p- b" ?* w3 J
- PtConfigs.Item("PDF").Delete; s' c: O- E) o5 X- N9 \- m/ `
- Set PlotConfig = Nothing" j2 \: o; s6 F3 U. T1 y8 k$ L
- acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot6 z6 I& ^4 D8 J1 H% i* L6 b
- % c1 O- m" z. u' T* V6 A! n
- Debug.Print "CreatePDF ok!"/ t. s" x. W m8 O, B( ]! j
- End If
2 ?/ g' g: b o3 } - End If1 Z. A- s3 x( f& ^! J+ y
- DoEvents2 T0 J& u" f# g: V3 ~
- Next ent* M$ S- N0 i' a( O
- Debug.Print "CreatePDF -------------------------------------------------<"+ V1 r: U* g8 X. {; u0 X+ |
- Exit Function4 V/ d/ N4 K$ l5 @
- , e* F$ ?, L; Y! ?% A7 |7 p' W
- ErrExit:! l; |- W I9 Y) O
- CreatePDF2 = -1; g, [- p- P# {& \
- Debug.Print "CreatePDF Error:" & Err.Description3 u+ m. B* {& y) X0 q( g
- MsgBox "CreatePDF error:" & Err.Description
. p, d" J( J8 [8 w - End Function
复制代码 |
-
|