|
|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑 8 m! Q! t1 N6 n0 _8 Y$ f
3 x* G* U# \" o+ ?) t P7 d" s
版主及各位朋友:中午好!7 }3 H, S8 T6 ]* }
0 `+ |9 F( q1 _, x( b CAD版本:AutoCAD Electrical 2010
3 d/ }; M- C' L. P- `: ^+ p4 m" e8 o. i5 S( H+ p& I, A
我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!$ j( l. g A5 Z* {! F8 u
问题如下:3 F r2 }# T1 i4 P4 R$ e/ ~
我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3 打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。. M) M/ h, }) g. e6 j
2 o8 e' W6 d2 J$ n
上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题。
- e$ S! n9 k" G9 I6 G9 @/ r* j
7 V( H8 A+ N* E 后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。
" j' }- m3 N# M- B/ ^" i 尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)
2 J, H2 {2 I( _
: z7 Z4 s. v# d& g( I, d X9 X 问题汇总:
8 _7 }; y1 b! O8 _ 1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?) M. ~; W( |) w+ w M: O
2、 “Adobe PDF” 打印机如何设置字体?8 b) k( ~% o7 ]
注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。- '---------------------------------------------------------------------------------------
; u* c' b! C! g' o - ' Procedure : CreatePDF \* L9 `4 O( l+ y) Y
- ' DateTime : 2013-11-20) `8 W8 [6 s/ _! @3 [ g
- ' Author : xwang; p" {& X. t; K
- ' Purpose : CAD中DWG图纸导出PDF文件
% x) j# R7 M. \ - ' param : acadDoc: AcadDocument
) `3 q) t9 i5 B* H - ' : filename: DWGFile( F1 \+ F: A/ S% w0 b/ ?
- ' : strPdfFile PdfFile
y) t. P; a$ ~/ s( J- N- W - ' : ConfigName: Acade - DWG To PDF.pc3, q, L3 Y0 \( e0 Q/ O# o
- '---------------------------------------------------------------------------------------
; J/ |1 x A: m1 \. n+ v- x - Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer6 Q1 x. e* | P5 D; z
3 @/ o" t \ _: I8 z# x/ s2 H- Dim PtConfigs As AcadPlotConfigurations
, n3 m3 j; w. U: C' G/ a - Dim PlotConfig As AcadPlotConfiguration
+ Q- P: t( C, o1 [* l- L3 [ - Dim PtObj As AcadPlot7 T; y, e4 H4 T$ j2 x# d
- Dim BackPlot As Variant' y; G) z0 y( v; j
- . e4 J+ C" `% s) ^. ?$ k( ~
- Dim ent As AcadEntity 'Object
4 j! S) o8 T! D+ q9 |* \ - Dim blockRef As AcadBlockReference
3 L# m ^) a9 O/ z - 5 [& y# o4 E3 p9 N2 J
- On Error GoTo ErrExit
+ Z* E ~6 z3 M/ G
0 y0 q6 V) e- Z9 ~$ t W2 H; d- Debug.Print "CreatePDF ------------------------------------------------->"9 k/ p2 k3 g6 Q. h8 r2 k
- Debug.Print "打印机:" & ConfigName
S. H9 C- m/ O1 y: k3 a" Y% M - For Each ent In acadDoc.ModelSpace6 e/ V; o; g$ [8 c) T
- If TypeOf ent Is AcadBlockReference Then' P% |* R" _8 J, ]
- DoEvents6 U( p& t5 K: @ {8 P1 H+ G6 Z' l
- Set blockRef = ent
) j+ d) x8 f- t/ b - If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then
! n) ~7 s$ {. _! A
2 t5 p( s `# _ k& C" k- Debug.Print "块名称:" & blockRef.Name
1 w0 r! |# o6 } - : ~5 |$ i1 C( T, G, |! J" f
- '块引用的插入点( e# G4 E& C6 k1 i- s$ R/ l
- Dim insertPoint As Variant
8 j) |9 q. M- ?7 X - insertPoint = blockRef.InsertionPoint
2 w' j4 H9 w2 e/ b/ n% P$ ?1 U - '放大比例
. q8 B8 j f2 L: [. S2 }/ ]( P - Dim xScale, yScale As Integer9 g! z/ j4 i$ S- n, O8 \1 p1 m
- xScale = blockRef.XScaleFactor: u, ?2 K& L7 r- m7 V- |. R
- yScale = blockRef.YScaleFactor4 V, o, F) c7 @/ P
-
1 B7 g k0 k, w+ O# E ^ - acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"' r8 w0 ^+ p& b* _
- Set PtObj = acadDoc.Plot6 q' G2 |- A* L* i% _
- Set PtConfigs = acadDoc.PlotConfigurations R$ A) G% H s% S8 ~1 m ^
( L% l6 Q5 s+ \- r- PtConfigs.Add "PDF", False
% R" ]% t+ k9 C+ h9 o - Set PlotConfig = PtConfigs.Item("PDF")
7 P% V' ?4 I$ g: v% }/ r% I - PlotConfig.StandardScale = acScaleToFit
! h8 y8 N; P2 M. {; R - 4 v# M% F! k0 P$ o
- PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3". q. S1 h6 u% C/ S8 R& M. p
- 'ANSI_A_(8.50_x_11.00_Inches)
& _; P' }& T+ }0 x5 T - PlotConfig.RefreshPlotDeviceInfo
4 E6 |/ _. e1 ?- v: l2 X2 k0 ` - ( ]$ A; j3 G; v0 o F% ^
- Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet7 Y: O* P( j' }" p7 V7 ]
- Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName: g7 @1 W1 H8 `: `
- + Z* y# }2 e4 K
- acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式* H0 S9 f$ _' O. i; y
; b0 N9 S$ P3 e# _! U1 e- '使用图形文件的线宽! r. ` a% `$ l" }7 l1 W
- PlotConfig.PlotWithLineweights = True4 R9 ^. P' G( d) l( B. r& k9 H) {
- '是否启用打印样式9 `8 E! d% O' W: S& u2 o
- PlotConfig.PlotWithPlotStyles = True* ^( z* [3 l. {5 e9 E+ g: Z
- ; ~# w9 g4 m3 E
- '宽高基数
# F4 o: c1 }5 V2 B3 E( Y7 g - Dim width, height As Double
! k1 U& J2 P: Z. W d - If blockRef.Name = "ACE A3块" Then
7 A3 W1 c6 k: D% c# S! U - width = 420, d. m5 L: j/ @! Y
- height = 297" o5 n6 U9 C" i& c# S
- acadDoc.ActiveLayout.PlotRotation = ac90degrees
# V* \9 |1 P- [( X o - acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"
. E8 Z% B1 @6 ]1 Y4 B - ElseIf blockRef.Name = "ACE A4块" Then
+ Y6 n$ K7 O3 ^# a1 h8 h$ V: o - width = 210
* n7 z3 J+ W) h$ j/ r - height = 297
6 f% S7 G0 w$ y - acadDoc.ActiveLayout.PlotRotation = ac0degrees
8 B# m% Y, h9 `5 s# S- m o - acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"
8 R0 X9 F2 ]4 ?* y) a - End If
5 |5 d5 d1 W" x -
) `0 X# C, B2 G! j* j - '打印区域- b, @+ i. w" d
- Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double0 O- Z* _- ?: e( G; c
- LowerLeft(0) = insertPoint(0)
^* a( W- h" B6 V; C7 C - LowerLeft(1) = insertPoint(1)1 y; _8 r0 S- u* ^- g {9 K
- UpperRight(0) = insertPoint(0) + width * xScale3 e; D$ O$ b1 n2 E) m. R: }
- UpperRight(1) = insertPoint(1) + height * yScale
) d% ?+ Q: t. }/ m# i. ~( N -
9 i" Z! M2 {( H; [# a; x - '设置定义要打印的布局范围的坐标
! s4 v# @" X" Y/ C5 F9 g$ _ - acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight
5 P0 l- A. a$ C' x - '指定布局或打印配置的类型
( V8 Y/ K& s! t9 R - acadDoc.ActiveLayout.PlotType = acExtents
7 t% e h& `5 p - / K. T0 e. w5 c3 ~- \
- BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT")
2 F; ]. r# R! y5 j - acadDoc.SetVariable "BACKGROUNDPLOT", 0
5 |" h; Z' l+ h6 q* Y* ^6 f - PlotConfig.RefreshPlotDeviceInfo
3 B- Q/ V- z* F( d+ X - ( \( N$ k( \; M- p' W* E4 T
- Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet
0 Z! N z) d* x$ C E - Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName" k0 i2 c/ Y3 M' R8 k5 d" D
- Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation
9 |" u4 r$ E" m6 U- F X$ Z - Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName8 x7 v0 R5 O1 F3 w! J( V# G
- 9 `0 W, i. V$ O& A$ c0 c( h* m: [0 g
- strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")
' Z) C5 l9 j$ O( J+ H! J - Debug.Print "输出位置:" & strPdfFile c8 u' `0 H' I' P b" N- W3 h# c
- ) x) N4 T7 ]6 m ?1 `2 v
- 'Now you can use the PlotTofile method1 z6 k& }% a7 d" u' Z
- If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then: @% A, G# a1 U" s# A" U& _1 g/ `
- Debug.Print "PDF Was Created"5 S9 }! b0 O ]$ X
- Debug.Print "PDF Was Created"5 ^+ V5 y3 J) H8 q8 p0 B5 I) a; ~
- Else9 ]/ ]# Y$ m: I) F5 Q% s3 h; C' t' Y
- Debug.Print "PDF Creation Unsuccessful!". t' F/ B4 k0 l9 b2 a
- Debug.Print "PDF Creation Unsuccessful!"
! Y0 Z2 A) o7 ~ - End If
W. a! d) P/ G& r1 j - PtConfigs.Item("PDF").Delete, U- X8 _1 H' W: p
- Set PlotConfig = Nothing
: A; J( B( }: C5 P - acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot: o `4 b4 o: m5 W6 D
- 2 z2 s9 h. j- x+ I
- Debug.Print "CreatePDF ok!"1 d) V" j2 q- d
- End If
P' A% B2 b" L: i! g3 r( y' {; p - End If
! O' }' u9 D7 P/ u" ]% N" x0 h - DoEvents
0 \0 t' l6 Y: w% v- i - Next ent* ]. u! {2 Q5 C
- Debug.Print "CreatePDF -------------------------------------------------<"
2 t3 C. d+ ]8 }5 v: K% w - Exit Function; h e' L+ M, ?6 T- k9 y- [: b( w9 X
-
( i% U i2 L) l3 D) J! S - ErrExit:7 k6 T; D* G! V# e/ `
- CreatePDF2 = -1
4 @, ^( x4 y$ L B6 ^ - Debug.Print "CreatePDF Error:" & Err.Description
4 Z3 e& c5 @/ G - MsgBox "CreatePDF error:" & Err.Description
% R9 |9 q) R3 ? - End Function
复制代码 |
-
|