|
|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑 ' N& w# Z5 v% W; n- v& V. F
# v! l. h! h( g: N
版主及各位朋友:中午好!. x7 z* i) T9 V! j& Q. w- t
$ {! u9 v% ~2 D' N5 u1 |
CAD版本:AutoCAD Electrical 2010+ b# L1 d5 B% V8 y- ~. R
4 U0 m+ I% D4 F6 f$ w 我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!
. E3 M! l0 E2 f5 J% B' d% w 问题如下:
& N6 l5 u. @+ {: { 我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3 打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。
) H% a+ l- e& C: R0 I, e, G
9 |8 |! g! I6 o* n 上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题。
; H9 o; E0 U7 L" j5 s
5 q0 |5 a' ]5 g1 H 后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。
K7 r, T1 C5 s9 V 尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)
; _+ ]8 s& Q J4 W: g+ H
$ V2 v5 j* s9 z0 _+ w! b% ^4 n 问题汇总:) ?8 V! l9 k! {! K
1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?: d$ v: L/ V- y6 [4 c
2、 “Adobe PDF” 打印机如何设置字体?
. J3 B: L1 N3 C* W2 V 注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。- '---------------------------------------------------------------------------------------3 w" s( T/ o9 @5 D7 Z" N1 e, T
- ' Procedure : CreatePDF
2 f; `8 R5 ]5 v+ K8 G, r - ' DateTime : 2013-11-202 W4 @' E, s& z
- ' Author : xwang
7 J( n! H7 a0 S* H# c) x% u - ' Purpose : CAD中DWG图纸导出PDF文件
. t2 v+ |, b8 w! L6 Z - ' param : acadDoc: AcadDocument8 V% r. D3 D4 l# V9 |3 p) W5 k
- ' : filename: DWGFile
: P+ T9 f+ g9 a S+ C) }* F% ^# ? - ' : strPdfFile PdfFile
. Q4 b( z! x2 c5 G$ I' N7 w - ' : ConfigName: Acade - DWG To PDF.pc32 w8 Q1 ~8 s0 v3 b+ b
- '---------------------------------------------------------------------------------------+ t3 B5 L5 ]: t" |2 R
- Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer
8 v( R7 Y4 A/ b+ x - + ?- e2 L. a9 r3 z. H
- Dim PtConfigs As AcadPlotConfigurations4 E7 B$ J7 m* v7 K
- Dim PlotConfig As AcadPlotConfiguration
t* ]4 _' @7 I; X) K5 }; n - Dim PtObj As AcadPlot
" Z5 }. J4 P) z% b4 n - Dim BackPlot As Variant4 T6 y+ A( V, V) U
-
- P) E7 O- N |3 L- I' a* E: m8 L - Dim ent As AcadEntity 'Object
! a4 k. S8 V8 Z, `$ F% y% L8 r - Dim blockRef As AcadBlockReference
+ B$ e" d" ] b4 ?; u/ Q -
1 [/ \ [: _! v( S" k- w6 B) ]2 X - On Error GoTo ErrExit
, U: Z c0 p- D5 Y: X2 |5 n
/ }" j( o5 i- v: R- X- Debug.Print "CreatePDF ------------------------------------------------->"( M0 Q1 ? p" w# a, p; @
- Debug.Print "打印机:" & ConfigName
$ H, S) M& i- \: z - For Each ent In acadDoc.ModelSpace
5 k, ~( N9 T5 { k6 O9 ?/ e - If TypeOf ent Is AcadBlockReference Then
, V1 U/ X" V) n8 y9 N* | - DoEvents
# ^; V& N! T6 I2 q' b+ l' V - Set blockRef = ent5 ?1 \4 @6 c( D
- If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then
) t5 D7 Z5 p0 s9 z. i8 X* u7 C - 7 b# c* H2 [$ M: O: K) i
- Debug.Print "块名称:" & blockRef.Name
, r4 k& N* O- ]+ D3 X( T1 q -
& A) Z% m( E- r - '块引用的插入点6 n3 h* G. z Q$ a( x
- Dim insertPoint As Variant
2 e5 \4 e- w( g - insertPoint = blockRef.InsertionPoint% e) G1 D `. S) r+ v9 d
- '放大比例
. F- N6 ~3 `- ]5 Z, H* d2 \ - Dim xScale, yScale As Integer0 Y. `8 n* B, l" u
- xScale = blockRef.XScaleFactor3 c6 c+ J9 b# d3 ?
- yScale = blockRef.YScaleFactor0 K" [% d; C0 C& c
- 4 \8 Z0 P- j5 l" |6 f
- acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"$ Y( x2 w1 p7 M, G$ a
- Set PtObj = acadDoc.Plot
9 B# a2 K# M \2 H, B. \ - Set PtConfigs = acadDoc.PlotConfigurations
9 [7 y; I! y8 v* N4 W+ m - 0 L( I6 W z) j6 Z, E
- PtConfigs.Add "PDF", False
: R6 a5 m6 S: t4 T+ \0 Q - Set PlotConfig = PtConfigs.Item("PDF"). s9 E" \* D' g6 w, ]
- PlotConfig.StandardScale = acScaleToFit
$ j [. s+ c/ {7 g - 2 V' |0 p, _3 H8 h
- PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"' _3 u0 l( i+ I8 a5 ?: E4 L
- 'ANSI_A_(8.50_x_11.00_Inches)% S% H9 P* t* O5 r! X
- PlotConfig.RefreshPlotDeviceInfo3 m$ j2 d, s! Y. W1 |
- 0 ?2 Z J/ I9 u! i
- Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet& c5 C5 J- y5 b" _" p
- Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName# ~9 i% C7 P/ `# k6 A0 [. n
-
6 u8 q7 J* _& b2 v6 k2 x - acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式1 c+ ~4 H$ H3 B+ Z0 Q/ ]( t. T
# |; p4 {6 i5 j4 |9 U: l- '使用图形文件的线宽
5 y# w& i: k% d& Q - PlotConfig.PlotWithLineweights = True
- l. \ a4 V/ X+ | - '是否启用打印样式3 w. O4 k* O+ E2 ~) k+ ]) l6 [
- PlotConfig.PlotWithPlotStyles = True8 a& t8 K7 Y8 n
n% c5 K6 U" @# _5 j% i+ V7 t$ d- '宽高基数9 `, M q$ x C' [
- Dim width, height As Double
- w3 ~/ k3 a3 F7 ` - If blockRef.Name = "ACE A3块" Then% X4 A% h! b6 b7 i7 Y, x2 u, n! [
- width = 420# V# ?0 E1 L9 ?9 B/ [
- height = 297$ B8 I8 r( T( K3 {" t( m" d: }
- acadDoc.ActiveLayout.PlotRotation = ac90degrees
0 _) q3 s7 p) y6 W - acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"0 ?( v% u$ v- B2 ]
- ElseIf blockRef.Name = "ACE A4块" Then3 M8 Z) P$ G" P U3 X4 ~
- width = 210- v0 g& o: F5 f" Z; C b4 j( P
- height = 297
% l( `( K- f9 V+ B) n- m @ X" M! n - acadDoc.ActiveLayout.PlotRotation = ac0degrees
/ Y+ |2 t" m5 a/ Z - acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"" C- }& @( M0 k2 X& e) x B( `
- End If
/ ^) K! R0 k' r6 e# Q -
1 B7 G% y5 V. B6 f) \# w - '打印区域
% }' M* @ W8 ` - Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double
5 {+ u% i0 z; f* Q' g - LowerLeft(0) = insertPoint(0)% C( D2 o' D1 R" D7 E2 p9 {9 g% t+ J
- LowerLeft(1) = insertPoint(1) N% t0 }0 q9 N; _/ a
- UpperRight(0) = insertPoint(0) + width * xScale
$ K( F( N* K, u1 D( {% s& p. w - UpperRight(1) = insertPoint(1) + height * yScale
" M+ X/ r9 E* i -
* l- _6 Q" z4 F6 {" ]: }/ Z k - '设置定义要打印的布局范围的坐标
: }, |2 h3 M9 f7 Y - acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight* D( B. h8 `8 o3 b
- '指定布局或打印配置的类型
/ F0 V8 U" g& F( K- @3 M - acadDoc.ActiveLayout.PlotType = acExtents
5 e7 N! f- J* X! _& Q) ? F - 5 l' F, L& l0 S" L& Y2 X
- BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT")
: \- C+ x Y7 H: v - acadDoc.SetVariable "BACKGROUNDPLOT", 0
$ V& ~& r" w4 P( M - PlotConfig.RefreshPlotDeviceInfo
6 v S* a! `. i3 `; [ - 3 K$ w* a! _* x7 L2 `7 G
- Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet: n6 B4 J# T$ W
- Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
, Q) w; o3 |5 n0 | - Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation$ @$ Q* }4 ^: f* H* y f( m; q( `
- Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName' o, I* R+ K; ]6 h( E( `
- , s: ?; N, q Y) Y. ~' B" w$ X" ^
- strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")
9 T s2 K. n$ | d0 ^7 L% A. w! k - Debug.Print "输出位置:" & strPdfFile3 a1 y3 D' p& u2 M% c
3 f# @, J" u5 i5 d" i: r# V$ m- 'Now you can use the PlotTofile method
; [, u/ C" c2 f5 q - If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then
, V+ [/ w- P8 ]+ s- M9 M2 P - Debug.Print "PDF Was Created"
3 G6 \4 R% g) X' z. S - Debug.Print "PDF Was Created"- W4 }5 @* Q, H0 E: ^
- Else2 @3 U" s v1 T7 M
- Debug.Print "PDF Creation Unsuccessful!"
: |. G- R3 k( U& U - Debug.Print "PDF Creation Unsuccessful!"
/ U8 ?4 w% ]2 }, b4 E - End If% r% \/ ^8 X+ H+ z8 |9 I' `9 u1 G
- PtConfigs.Item("PDF").Delete
) M7 f+ O+ y$ a$ P2 m( H - Set PlotConfig = Nothing) }. ^ z. s) J
- acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot+ S! ^: l, P* t1 p# e* s# |& c3 S9 \
- : m# F$ @7 j# q2 g% W
- Debug.Print "CreatePDF ok!"
# r Y7 u X3 i1 X7 Z - End If2 ]% z$ `$ e' U; S0 A
- End If; c$ t; r' Y* \$ q6 v
- DoEvents
; _: g" N6 q- s - Next ent4 G# J9 `; h! ~; N1 p5 p
- Debug.Print "CreatePDF -------------------------------------------------<"7 c5 E0 V6 F5 A( V! R: k A1 Y5 @7 `
- Exit Function3 [9 \* J* H) w4 e$ l4 Q- L
-
* D0 H3 }" ^4 W) L- ^. @) z- \9 H - ErrExit:4 ?: C' W) z" T8 Z4 H
- CreatePDF2 = -1
) t2 w$ ?6 h+ L* e4 g# P+ b - Debug.Print "CreatePDF Error:" & Err.Description0 C J; ?1 d- b2 ~7 v% g
- MsgBox "CreatePDF error:" & Err.Description
' A% S/ E. t- S& f - End Function
复制代码 |
-
|