|
|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑
3 J) M1 A( |5 W: f S7 b2 A) S5 r
' U1 W7 W. N0 k版主及各位朋友:中午好!- N0 i+ `9 ~# }/ }8 ?7 o
4 t% {# M7 X- I% G+ L2 o CAD版本:AutoCAD Electrical 20105 U% t5 {: @" |: k+ F. L2 n. J5 A6 ]
: n, ^3 G! m9 f4 D2 @# n7 d 我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!$ P: v4 ]; b/ }+ |8 J1 I- f1 i
问题如下:
& O3 m7 o5 K! | f) Z 我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3 打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。
' j; Z, N6 S% @. z. R9 G* S: Y1 \; j0 S8 J" M6 f
上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题。
& ]5 ~- ^, Z/ {8 u5 U- k, B$ p* l8 E6 W! k4 @) U' }3 ?) F( @3 g
后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。
. L' I x6 \: S4 u" T( ] 尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)
- X( C: j' S; o) l4 J1 Z) @, \4 `: S% I# U# I
问题汇总:
! w7 ]$ d% T5 ?1 r& j 1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?' W3 B6 Z: B5 M$ L5 }# C
2、 “Adobe PDF” 打印机如何设置字体?
) N5 h1 }, _2 Q# r5 M. _0 M! \9 A 注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。- '---------------------------------------------------------------------------------------4 O6 }3 w9 R) W, t% ~2 |
- ' Procedure : CreatePDF+ C( F3 W: A( W2 G/ m+ |
- ' DateTime : 2013-11-20* B. @6 v- r: w
- ' Author : xwang( g0 e0 A" u4 S( G) p) d
- ' Purpose : CAD中DWG图纸导出PDF文件' ^, U: { J2 j0 J. i& |
- ' param : acadDoc: AcadDocument3 z0 D8 S9 x& f& Q( u8 p% s
- ' : filename: DWGFile
. N* O# ]! t) O0 }( X# u1 a - ' : strPdfFile PdfFile; N* Q4 S. ?3 I% \0 x
- ' : ConfigName: Acade - DWG To PDF.pc3
( q. m7 A: [6 f- r! F0 D - '---------------------------------------------------------------------------------------% W' E" q" M& o- E) [. J$ P
- Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer" K) d0 [3 r' ]1 `5 f! o5 w
- 4 O1 [! ? y/ N% }, c4 y# E
- Dim PtConfigs As AcadPlotConfigurations: Q, ~* h' `$ v; {# _( z7 N
- Dim PlotConfig As AcadPlotConfiguration
3 r% ^9 J1 o$ X: `) t8 C8 @1 u - Dim PtObj As AcadPlot
! h' R" Z, r2 J. z - Dim BackPlot As Variant3 H, ]9 n( s0 g5 q
-
( Z$ ~" Q# ~7 v9 b& q$ S - Dim ent As AcadEntity 'Object
- l8 a; q) n% T; [* D - Dim blockRef As AcadBlockReference) c! U# W( R; [4 t/ Q3 O
-
|% R& N% q4 S3 Y4 @9 ?4 Q - On Error GoTo ErrExit
4 M4 C( }' _( c- h
6 o b& f' P Q- Debug.Print "CreatePDF ------------------------------------------------->"
3 m) |! H/ q o6 w - Debug.Print "打印机:" & ConfigName
1 ?$ d+ n# N/ w) W# D5 A- H - For Each ent In acadDoc.ModelSpace
+ E' q% c2 _- |& @9 B% b - If TypeOf ent Is AcadBlockReference Then
5 s8 D6 L$ y1 A4 u0 H t - DoEvents
) C/ l) A# G9 E0 F" j% [ - Set blockRef = ent: u- T K# K2 @- r8 E" m
- If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then
* r, _, u2 y, e) A
. `0 e7 ~ e6 F$ A/ I! t- Debug.Print "块名称:" & blockRef.Name% K8 \, f8 C+ U' p
- {1 @% y6 f2 z8 F+ Z
- '块引用的插入点- U* c- X' R. h, D/ [( c
- Dim insertPoint As Variant
3 [" _( E( g: Z& X - insertPoint = blockRef.InsertionPoint5 C1 K9 F& F3 Z4 `/ z X
- '放大比例
* k" `! L( b; r8 ? - Dim xScale, yScale As Integer
2 F( `4 v! }$ ?+ _- q - xScale = blockRef.XScaleFactor
' k1 R; {1 u# j) p; n - yScale = blockRef.YScaleFactor' u z# V. @0 b, q' a
- ; Z( t- O& y; I; j$ z* X
- acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"; _. E, s- n/ e+ _
- Set PtObj = acadDoc.Plot
& p6 f, J4 m% M6 K - Set PtConfigs = acadDoc.PlotConfigurations) N. }* E/ b' R5 K6 x# x+ }
- 8 C- r& X" M4 j! J. n) W! J
- PtConfigs.Add "PDF", False
: Z; g5 w) L. Z - Set PlotConfig = PtConfigs.Item("PDF")- i$ K* {( Q' m0 { |$ m
- PlotConfig.StandardScale = acScaleToFit) a0 {, E8 E1 q: U
- & M+ M& T2 j# v# A8 I2 X& c
- PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"2 n( `' q( k8 k- }/ z- X, x
- 'ANSI_A_(8.50_x_11.00_Inches)* i) t: M$ M) n$ T4 H/ \) o
- PlotConfig.RefreshPlotDeviceInfo
5 g$ ?, q* U- Y( X/ r0 F- j# E - - P) b6 N9 ^4 @' T+ I6 _
- Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet% m" Q' @7 `8 w( x) x$ u
- Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName2 N4 S" b6 l! E7 n- n' ]$ ~
- - ?2 C. a# P% `6 t- P
- acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式4 F( C6 X9 G0 _- j3 n8 q6 i
0 C* W5 X; |8 Z- '使用图形文件的线宽+ w- D P( q2 L+ F" X+ m
- PlotConfig.PlotWithLineweights = True* O6 v% j( _% h: g* G6 o9 [9 N
- '是否启用打印样式9 i4 j+ ?3 q. p( f2 [5 l" k/ l
- PlotConfig.PlotWithPlotStyles = True2 S+ W5 C* @$ k& P) g9 f
* B0 G7 v' p b |4 t- '宽高基数
( n- s9 o5 m8 t! z- X( g) J' p$ I - Dim width, height As Double
% ]6 J3 k# W6 |* ^$ ]" L - If blockRef.Name = "ACE A3块" Then
$ J; B" B8 [# k% j! }* H4 ? - width = 420# E! c9 g0 N3 [" m' c
- height = 297+ N* D! \, \. V2 D/ m9 D' x2 U
- acadDoc.ActiveLayout.PlotRotation = ac90degrees1 T9 g! E- {8 L
- acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"9 s x9 l2 x6 {) c
- ElseIf blockRef.Name = "ACE A4块" Then
5 S. i9 D3 {" | w& B4 Y - width = 210
, w- v* y2 e5 }! D - height = 297: Q! P" g; v: P
- acadDoc.ActiveLayout.PlotRotation = ac0degrees
7 H* D0 e3 f. B* H - acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)" X q& O p0 b. Y2 h) }- U3 Z
- End If e+ I4 A8 M& T# f
- : {; r- ]0 ^8 r) K5 F% F
- '打印区域
' v! ]# x5 n! ^# m* \, \; r Q% D. x - Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double
) `1 |' ^8 N) t - LowerLeft(0) = insertPoint(0)6 v) b! D4 Z) d! g% R# Q
- LowerLeft(1) = insertPoint(1)( Q+ h4 M, h# \9 M5 }
- UpperRight(0) = insertPoint(0) + width * xScale
; U# o/ }) t1 Q: @( y# _: U - UpperRight(1) = insertPoint(1) + height * yScale
7 b3 G0 J: ^7 n - ' Z3 Q0 V+ o" \& i7 G- c
- '设置定义要打印的布局范围的坐标/ f; j* i3 U1 `) c
- acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight, q' W2 G- R. d; y( }
- '指定布局或打印配置的类型% ]8 X3 `! R8 S
- acadDoc.ActiveLayout.PlotType = acExtents
- [$ K8 P7 w. A* I1 ^. Q$ Z2 @% S0 k -
6 N @! }+ {5 z f! o S - BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT")
6 o) X' v7 P2 z - acadDoc.SetVariable "BACKGROUNDPLOT", 0& p) O$ v) k4 ^
- PlotConfig.RefreshPlotDeviceInfo
x& t) r+ i5 W% h, z0 W - % d( z% u. I# `! M) A
- Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet
& T* X( t% N, ~4 ?: H - Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
: y2 Q: C* c/ o. L" j8 I% G - Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation* l( \+ g8 ~, }0 s( C- k
- Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName! y- [( B, @+ F- m& v6 `( v
- ( w+ ?' Y$ Z9 c! P* h
- strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")1 U: @. R4 }% Q- R8 \6 `5 W
- Debug.Print "输出位置:" & strPdfFile/ z S' F7 y. G6 w% [
- M% t; l" _# s- k3 M* [- 'Now you can use the PlotTofile method
0 o& s" X/ w* ]+ A! m0 ?3 i3 A6 y - If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then
5 m8 a5 o# y; n$ J% F+ r - Debug.Print "PDF Was Created"
" g+ b) ~4 ~" \/ A! Z0 \ - Debug.Print "PDF Was Created"* }- j H& f+ ^ C2 g
- Else
3 U* x* [ L3 z& ~0 `8 k - Debug.Print "PDF Creation Unsuccessful!"
- P! t: f! g: S/ {- E" c - Debug.Print "PDF Creation Unsuccessful!"* d: C+ u: M- Y7 _
- End If
! w# G0 d3 w/ m - PtConfigs.Item("PDF").Delete/ \3 T5 r( y, w6 ~( Z
- Set PlotConfig = Nothing. K$ A/ t) A$ h) ?* q- D: Q" s" [6 r8 n
- acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot7 C* _9 a* L9 x% Q$ T6 W
- : G3 w8 e: z$ P7 B3 C" e7 K
- Debug.Print "CreatePDF ok!"% P) h$ Z S: n% S/ C
- End If
5 Z2 e" z. `7 t! Z; i& Z/ _5 W7 F7 @8 h - End If8 C8 _2 V4 l3 h, R+ x0 b5 R( U
- DoEvents; @0 C- Z! j$ H5 X3 [+ k1 }
- Next ent
8 w# r! I# H& S. w/ |7 z8 Z2 Y8 D - Debug.Print "CreatePDF -------------------------------------------------<"7 X( ^) Z( s0 T. O6 }
- Exit Function
& [8 t( E# Q8 ~) C9 h! Y - ; h) O$ t; S Y! v+ j2 Z
- ErrExit:
6 N8 q( i' q, _; `, o1 {% C. L - CreatePDF2 = -1
) l! @8 M* g7 k- R+ l% Z - Debug.Print "CreatePDF Error:" & Err.Description
4 L6 @- V* l2 F# r/ C& d1 R - MsgBox "CreatePDF error:" & Err.Description
: ?; g& B- }( C( n - End Function
复制代码 |
-
|