![]() |
|
|
|
#1
|
|||
|
|||
|
Hi all! I'm developing a script to make a doc more hand-written like. I originally used randomization to alter the position of each character. Yet, the result is a bit weird since common people write in a line that is oscillating rather than random.
Here is the original code: Code:
Sub HandWrittenSimulation()
Dim R_Character As Range
Dim ParagraphSpace(3)
ParagraphSpace(1) = "11"
ParagraphSpace(2) = "12"
ParagraphSpace(3) = "13"
For Each R_Character In ActiveDocument.Characters
VBA.Randomize
R_Character.font.Position = Int(VBA.Rnd * 3) + 1
R_Character.font.Spacing = 0
Next
Application.ScreenUpdating = True
For Each Cur_Paragraph In ActiveDocument.Paragraphs
Cur_Paragraph.LineSpacing = ParagraphSpace(Int(VBA.Rnd * 3) + 1)
Next
Application.ScreenUpdating = True
End Sub
Since I assume the natural paragraph will break the continuity, I think just randomize the 1st character of every paragraph should work. Thank you very much XD Last edited by puff; 06-13-2018 at 05:07 PM. |
|
#2
|
||||
|
||||
|
I'm not seeing in the code anything that uses the ParagraphSpace values so your description doesn't match the code. To just look at oscillating the position of the text I would do it like this
Code:
Sub HandWrittenSimulation()
Dim arrPattern() As String, lngChar As Long, iPattCount As Integer, iScale As Integer
arrPattern = Split("0,1,1,1,2,2,2,3,3,3,4,4,4,3,3,3,2,2,2,1,1,1,0,0", ",")
iPattCount = UBound(arrPattern) + 1
iScale = Int(ActiveDocument.Characters(1).Font.Size) / 8
For lngChar = 1 To ActiveDocument.Characters.Count
ActiveDocument.Characters(lngChar).Font.Position = Int(VBA.Rnd * iScale + arrPattern(lngChar Mod iPattCount))
Next lngChar
End Sub
__________________
Andrew Lockton Chrysalis Design, Melbourne Australia |
|
#3
|
|||
|
|||
|
I just notice that. Now the code has the spacing part
|
|
#4
|
||||
|
||||
|
I don't see the point of variation in the line spacing. If it was imaginary handwriting then I choose to imagine that the writer was following the pale blue lines on the page which don't vary.
A more realistic variation would be to vary the font size from character to character within a band. If you did this then it is simple to just let the paragraph spacing use whatever the font size is on the paragraph mark (since this is varied by the code too) Code:
Sub HandWrittenSimulation()
Dim arrPattern() As String, lngChar As Long, iPattCount As Integer, iScale As Integer, aPar As Paragraph
arrPattern = Split("0,1,1,1,2,2,2,3,3,3,4,4,4,3,3,3,2,2,2,1,1,1,0,0", ",")
iPattCount = UBound(arrPattern) + 1
iScale = ActiveDocument.Characters(1).Font.Size
ActiveDocument.Range.ParagraphFormat.LineSpacingRule = wdLineSpaceSingle
For lngChar = 1 To ActiveDocument.Characters.Count
ActiveDocument.Characters(lngChar).Font.Position = Int(VBA.Rnd * iScale / 10 + arrPattern(lngChar Mod iPattCount))
ActiveDocument.Characters(lngChar).Font.Size = Int(2 * (iScale - 1) + (VBA.Rnd * 5)) / 2
Next lngChar
End Sub
Dim ParagraphSpace(3) means that there are 4 possible array positions (0, 1, 2, 3) but you ignore the first position.
__________________
Andrew Lockton Chrysalis Design, Melbourne Australia |
|
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Textboxes position isn't equal to initial position | dxdevil | Word VBA | 0 | 01-30-2017 04:32 AM |
| Shadow Position | shanemarkley | Excel | 0 | 07-30-2014 08:23 PM |
Hyperlink goes to wrong position
|
Stephen0352 | Word | 6 | 10-03-2012 04:41 AM |
VBA: how can I know the position on a document?
|
tinfanide | Excel Programming | 3 | 02-27-2012 03:24 PM |
| fix position for a segment in a doc | tai | Word | 3 | 10-20-2011 01:04 PM |