Разработка электронных устройств

Серийное и единичное производство аналоговой и цифровой электроники, приборов для промышленности, медицины, автоматизации. Разработка программного обеспечения для микроконтроллеров и сигнальных процессоров. Полное сопровождение проекта и написание технической литературы

Прототипы и серийное производство

Разработка и изготовление корпусов и передних панелей. Разработка и изготовление печатных платы любой сложности. Монтаж печатных плат.

Написание программного обеспечения

Весь путь от создания, поддержания и качества программного обеспечения под любую операционную систему. Основные направления сетевое и системное программирование, взаимодействие клинт - серверных систем.

Разработка механизмов различной степени сложности

Проектирование и прототипирование подвижных и неподвижных механизмов и узлов устройств и агрегатов. Полное сопровождение проекта и написание технической литературы

Создание, продвижение и обслуживание сайтов

Написание php/perl/c кода или использование cms. Собственный сервер для размещения Ваших проектов под любые нагрузки. Поддержание сайта в актуальности и продвижение в поисковых системах.

 
 

Техническая документация: печать документа в виде книги с переплётом.

Автор: от 22 Январь 2013 года, просмотров 3987

Google

Работа над некоторыми документами стала задача распечатать их в виде книжки. 

Вариант может и не совсем хороший, но достаточно дельный. Примерно изучив как должны распологаться страницы на листе выявил закономерность. 

Рассмотрим вариант расположения страниц на листе, если лист нашей книге располагается на половине А4, то есть А4 сворачивается вдвое.

Рассмотрим расположение печати для книжки из 8 страниц

Лист А4(исходник) Первая сторона листа Вторая сторона листа
Намера страниц в печатаемом документе
Первый 8 1 2 7
Второй 6 3 4 5

 

То есть страницы 1 и 2, 8 и 7, 3 и 4, 5 и 6 располагаются друг над другом соответственно по парам - вторая находится сразу под первой и седьмая под восьмой.

Расположение страниц, если печатается 4 страницы на листе (одна четвёртая А4) будет выглядеть следующим образом:

Лист А4(исходник) Первая сторона листа Вторая сторона листа
Намера страниц в печатаемом документе
Первый 8 1 2 7
6 3 4 5

 

Что собственно не сильно отличается от первого варианта.

Но необходимо учесть что для первого варианта общее количество страниц должно быть кратно 4, а для второго - 8. Объясняю почему - для того что бы не было пустых страниц и всё точно совпадало необходимо, что бы на каждом листе в первом случае находилось 4 страницы документа, а во втором 8. Так что если данные цифры не много не сходятся лучше либо растянуть документ до необходимых размеров, либо же ужать, какой из вариантов выбрать выбирать Вам, проще - до ближайшего кратного.

Имея знания в MS Excel было решено для начала рассчитать всё именно там, так как быстро, удобно и наглядно.

Для начала разметим примерно такую же структуру в табличном документе, пример показан на рисунке ниже и сразу же посчитав зависимость второй строяки от первой вставим формулы. За точки отсчёта будем брать первую и последнюю страницы, на мой взгляд, так удобнее.

Разметка документа для расчёта

 

И так здесь мы видим такое же расположение чисел как и в таблицах выше, единственное для полноты расчётов я взял 32 страницы документа. Здесь нас интересует вторая строка, она принимает значения -2, +2, +2, -2 относительно первой, то есть маленькие номера увеличиваются на два, а большие наоборот на два уменьшаются. Третья строка быдет выглядить похожим образом, ровно как и последующие.

Пример других строк в таблице

 

Теперь можно взглянуть как же у нас расположились числа если первая страница 1, а последняя 32.

Таблица с расчётами для 32-х страничного документа

 

Если посмотреть внимательно то после 8 страницы данные начали повторятся, но как бы в зеркальном отражении. Что и не удивляет, ведь количество листов А4 будет равно 32 / 4 = 8 , по этому все числа ниже девятой строки включительно не учитываем.

Теперь самое инетресное. Выделяем два столбца В и С с нашими номерами и копируем их в блокнот, я копирую в notepad++.

Копирование текста в блокнот

 

Заменяет в блокноте все знаки табуляции и переноса строки на запятые, в итоге должно получиться что-то вроде этого:

1
32,1,30,3,28,5,26,7,24,9,22,11,20,13,18,15

 

Так же поступаем и со второй стороной.

Теперь осталось лишь распечатать наш документ вставив сначала первую строку в поле для выбора страниц печати, затем перевернув листы напечатать вторую строку страниц. Свернуть вдвое и на месте сгиба скрепить степлером. Всё готово.

А теперь представлю маленькую утилитку, позмоляющую оптимизировать данные действия, правда пока толкьо расчёт, но большего собственно и не нужно.

Писал я её в далёком 2009 году, собственно тогда же, когда и разбирался с Excel'ем.

Вид окна утилиты, с описанием

 

Цифрами обозначены:

  1. Поле для выбора количества страниц в документе;
  2. Различная информация о нестыковках вычисления, например если в поле 1 ввести число 7, то программа автоматически добавит 8ю страницу и оповестит об этом
  3. Поле для печати первой части страниц (первая сторона листа)
  4. Поле для печати второй части страниц (вторая сторона листа)
  5. Профиль для расчёта, 2 страницы на листе или 4, в данном случае выбрано 4
  6. То как будут располагаться страницы при печати документа.
  7. Кнопка для начала расчётов
  8. Копирование поля 3 в буфер обмена
  9. Копирование поля 4

Исходный текст программы выглядит следующим образом. Прошу сразу не ругаться писал давно, да и под руками был только Visual Basic, но в любом случае не сложно перевести данный текст на другой язык.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
Imports PagePrint.My.Resources
Public Class frmPagePrint
 
    ''' 
    ''' Расчёт недостающих страниц
    ''' 
    '''
параметр расчёта
    ''' 
    Private Sub HowPages(ByVal col As Integer)
        If NumberPage.Value Mod col <> 0 Then
            Dim tempPage As Integer = ((NumberPage.Value \ col) + 1) * col
            Dim textWaring As New System.Text.StringBuilder
            textWaring.AppendLine(String.Format(needPages, tempPage - NumberPage.Value)) 'needPages - строка в ресурсах
            textWaring.AppendLine(addedPages) 'addedPages - строка в ресурсах
            textWaring.Append(NumberPage.Value + 1)
            For i As Integer = NumberPage.Value + 2 To tempPage
                textWaring.Append(",")
                textWaring.Append(i)
            Next
            txtWaring.Text = textWaring.ToString
            NumberPage.Value = tempPage
        End If
    End Sub
 
    ''' 
    ''' Расчёт порядка страниц
    ''' 
    ''' 
    Private Sub CalculatePages()
        If Profile.Text.Length <> 0 And NumberPage.Value <> 0 Then
            Select Case Profile.Text.Substring(0, 1)
                Case "2"
                    HowPages(4)
                Case "4"
                    HowPages(8)
            End Select
 
            Dim arrLenght As Integer = NumberPage.Value / 4
 
            Dim side1Col1(arrLenght) As Integer
            For i As Integer = 1 To NumberPage.Value / 4
                side1Col1(i) = NumberPage.Value - (i - 1) * 2
            Next
 
            Dim side1Col2(arrLenght) As Integer
            For i As Integer = 1 To NumberPage.Value / 4
                side1Col2(i) = 1 + (i - 1) * 2
            Next
 
            Dim side2Col1(arrLenght) As Integer
            For i As Integer = 1 To NumberPage.Value / 4
                side2Col1(i) = 2 + (i - 1) * 2
            Next
 
            Dim side2Col2(arrLenght) As Integer
            For i As Integer = 1 To NumberPage.Value / 4
                side2Col2(i) = NumberPage.Value - (i - 1) * 2 - 1
            Next
 
 
            Dim text1Side As New System.Text.StringBuilder
            text1Side.Append(side1Col1(1))
            text1Side.Append(",")
            text1Side.Append(side1Col2(1))
            For i As Integer = 2 To NumberPage.Value / 4
                text1Side.Append(",")
                text1Side.Append(side1Col1(i))
                text1Side.Append(",")
                text1Side.Append(side1Col2(i))
            Next
            txtSide1.Text = text1Side.ToString
 
 
            Dim text2Side As New System.Text.StringBuilder
            text2Side.Append(side2Col1(1))
            text2Side.Append(",")
            text2Side.Append(side2Col2(1))
            For i As Integer = 2 To NumberPage.Value / 4
                text2Side.Append(",")
                text2Side.Append(side2Col1(i))
                text2Side.Append(",")
                text2Side.Append(side2Col2(i))
            Next
            txtSide2.Text = text2Side.ToString()
 
        Else
            txtWaring.Text = profileName 'profileName - строка в ресурсах
        End If
    End Sub
 
    Private Sub btnCalc_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles btnCalc.Click
        CalculatePages()
    End Sub
 
    Private Sub btnCopy1_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles btnCopy1.Click
        If txtSide1.Text <> "" Then Clipboard.SetText(txtSide1.Text)
    End Sub
 
    Private Sub btnCopy2_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles btnCopy2.Click
        If txtSide2.Text <> "" Then Clipboard.SetText(txtSide2.Text)
    End Sub
 
    Private Sub Profile_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Profile.SelectedIndexChanged
        Select Case Profile.Text.Substring(0, 1)
            Case "2"
                pcbProfile.BackgroundImage = My.Resources.page2
            Case "4"
                pcbProfile.BackgroundImage = My.Resources.page4
        End Select
    End Sub
 
End Class

 

Текст программы довольно прост и с точностью повторяет логику предыдущих расчётов в таблице, так что воздержусь от описания и позволю Вам самим со всем разобраться.

Оставлю здесь только это:

 [ Файл: PagePrint-App.zip ] - сама программа

 [ Файл: PagePrint-Project.zip ] - проект в VS 2012

Категория: