Какой параметр в PDF отвечает за отступ от края страницы?
Создал два PDF файла в ворде.
В одном PDF поставил левое поле больше, в другом - меньше.
При просмотре видно, что поля разные, но как найти размеры полей программно?
Пытаюсь выводить размеры ArtBox, BleedBox, CropBox, MediaBox, TrimBox и Rect, но они одинаковые в обоих документах.
C#
упоминается только в тегеOpenXML SDK
не упоминается вообщеC#
, можно предложить создавать програмно в ворде свои документы, там же править параметры страницы, после чего сохранять в pdf. думаю на изучение задачи управления парметрами страницы в ворде, должно уйти гораздо меньше двух летinternal static bool wordAsConverter(string rtf, string pdf, bool verb = true, bool clean = true)
{
$"\t..try convert to pdf...".print();
var res = false;
var app = new Application();
try
{
var doc = app.Documents.Open(rtf);
doc.ExportAsFixedFormat(pdf, WdExportFormat.wdExportFormatPDF);
doc.Close(false);
res = true;
var fn = Path.GetFileName(rtf);
if (verb) $"\t{fn} converted to pdf".print();
if (clean)
{
File.Delete(rtf);
if (verb) $"\t{fn} deleted".print();
}
}
catch (Exception e) { e.Message.print(); }
finally { app.Quit(false); }
return res;
}
// что бы не смущал .print(); это уже привычка, для уменьшения многословности кода
internal static void print(this string s) => Console.WriteLine(s);
using System;
using System.Linq;
namespace parse_ip
{
class Program
{
static void Main(string[] args)
{
var l = Console.In.ReadToEnd()
.Split(Environment.NewLine)
.Select(s => s.TrimStart('-'))
.Where(s => s.Contains("IP:"));
foreach (var s in l)
Console.WriteLine(s);
}
}
}
Console.In
. хоть WebResponse.GetResponseStream()
, хоть сокет.Console.In.ReadToEnd().Split(Environment.NewLine)
, вставить File.ReadAllLines("путь+имя")
.en-en
(может даже en-us
) и заменяете на ru-ru
. правда бывают страницы для которых даже машинного перевода еще нет. но редкоdouble
Biginteger double
плюсов имеет не более 15 знаков точности https://docs.microsoft.com/ru-ru/cpp/cpp/data-type... а у вас там явно в разы большеdouble
. чем заменить в плюсах не знаю.но раз вопрос о шарпе, повторюсь - заменяйте на#include <iostream>
using namespace std;
int main()
{
int k = 50;
//cin >> 50; кстати доставляет
// по тому и предположил сразу k = 50
long double s = 36 * pow(55, k - 1);
printf_s("%.0lf", s);
}
using System;
using System.Numerics;
namespace big_int_net
{
class Program
{
static void Main(string[] args)
{
var s = 36 * BigInteger.Pow(55, 49);
Console.WriteLine(s);
}
}
}
float double
на таких больших значения как раз и дает ошибку - верны только старшие 22 знака из 87 (!!!). а BigInteger
данное выражение считает точно.Distinct()
использовать, а Where(d => (d.id == targetId))
Distinct()
, то даже при наличии повторяющихся id, но с различными данными, то вы получите ровно всю исходную коллекциюusing System;
using System.Collections.Generic;
using System.Linq;
public class dt
{
public int id;
public int val;
}
namespace distinct_or_not_distinct
{
public static class Program
{
public static void Main()
{
var listdata = new List<dt>();
listdata.Add(new dt() { id = 1, val = 11 });
listdata.Add(new dt() { id = 1, val = 12 });
listdata.Add(new dt() { id = 2, val = 21 });
listdata.Add(new dt() { id = 2, val = 22 });
listdata.Add(new dt() { id = 3, val = 31 });
"distinct dt".print();
listdata.Distinct().ToList().print();
newLine();
"distinct id".print();
(from d in listdata select d.id).Distinct().ToList().print();
newLine();
var targetId = 2;
$"target id {targetId}".print();
listdata.Where(d => (d.id == targetId)).ToList().print();
newLine();
}
public static void print(this List<dt> l) { foreach (var d in l) d.print(); }
public static void print(this dt d) => Console.WriteLine($"\tid:{d.id} val:{d.val}");
public static void print(this List<int> l) { foreach (var i in l) i.print(); }
public static void print(this int i) => Console.WriteLine('\t' + i.ToString());
public static void print(this string s) => Console.WriteLine(s);
public static void newLine() => Console.WriteLine();
}
}
или даже временный файл где все это на самом деле хранитсяне такого
что то подсказывает мне, что есть некая область памятитакое есть, это буффер вашего stdout, но для начала он под капотом системы. если в линуксе, то это одна история, если винде, то абсолютно другая. про винду добавлю - можете погрызть win32 api. с одной стороны гарантированно возможно залезть грязными ручками, даже из шарпа, в буффер stdout. с другой стороны гарантированно придется сильно напрягать мозги (с непривычка, а так то там ни че страшного) и много гуглить. а еще, в процессе такого обучения, наверняка иногда будете ронять систему. я так думаю. ибо если бы вы уже имели опыт общения с win32 api, то вряд ли бы задавали этот вопрос
Я хотел как КРАСИВО! То есть продублировать еще раз, как все, но так чтобы КРАСИВО, как будто я не занимаюсь черти чем, а делаю не как все и весь такой молодец. Понимаете почему?понимаю только что до вас не доходит абсолютно
То есть все таки нет? https://www.opennet.ru/docs/RUS/bash_scripting_gui...то что вы нашли, это перенаправление. я об этом раз пять уже сказал. в винде тоже самое, с небольшими отличиями:
Хм, нашел такая штука ... Оно Linux судя по всему, но суть ясная ... это вообще команда консоли, что судя по всему означает, что надо в "этом состоянии" запуститься ... Хм, мысль интересная ... Пока не выглядит красивым, что жаль.
если у вас выхлоп без диалога, то все просто до отвращения - пишете скрипт, в котором перенаправляете в "куда хочу" выхлоп проги, а уже после ее оокончания, выводите его еще и на экрана потоки ввода вывода, не смотря на различия в исходниках ядер операционнах систем GNU Linix и MS Windosw, иделогочески работают абсолютно одинаково. api разные. но идеология одна. перенаправить выхлоп готовой проги в скрипте элементарно, даже оператор для скриптов одинаковый
>
. но если вы захотите дублировать вывод (а именно так звучит ваш вопрос)Параллельное сохранение файла консоли где я хочу?то придеся лезть в системное программирование. и в Linix и Windosw
Console.WriteLine()
не соизмеримо проще. и в реализации. и в использовании SpeechRecogitionEngine sre = // буковку n пропустили
var sre =
ru-RU
это спелчекер а не компиляторfullunpack --keep "C:\alldata\alldata.bin" zlib nY/RHn+XH8T77 64VS крутой инструмент, в дебагере оказалось легко заметить, что кодаков всего два. точнее 3 варианта параметра
zlib это кодек
nY/RHn+XH8T77 это sid
64 это длина ключа
пока что валимся на кодеке, за все остальное не известно
zlib, zstd, zstandard
, но 2 из них синонимыfullunpack --keep "C:\alldata\alldata.bin" zstd nY/RHn+XH8T77 64
zstandard.net
кросс платформенная, но использует сторонние бинарные libzstd.dll
, которые различны для x86 и x64, по этому копируются в выходной каталог приложения в подпапки. надо скопировать нужную (по разрядности операционки) в выходной каталог приложения как скрыть или передать аргументы запуска уже в запущенной clientProcess приложение?ни как
мне тут подсказали, что нужно перехватить stdin запущенного процесса
упорство и труд, все перетрут.. если сильно захотите)
На счет C# очень много противоречия, между старой Form и WPF, какую использовать
foreach
ни сама коллекция (лист, массив, перечисление, не важно) ни ее элементы, не подлежат изменению. только чтение. это правило языка C# (но за Mono не отвечаю)for
обходите коллекцию с конца, а не сначала, таким образом не будет проблем с индексами (хотя можно и while
использовать для обхода с головы, но на for
думаю быстрее поймете суть). пример for(int i = Group.Count - 1; i >= 0; i--)
{
Destroy(list[i]);
list.RemoveAt(i); // о размере списка не заморачиваемся вообще
}
Group.RemoveAll(tmp => tmp is MissingReferenceException);
// хотя надо проверить совместимость
while
это примерно такvar i = 0;
while (i < Group.Count)
if (Group[i] is MissingReferenceException)
{
Destroy(Group[i]);
Group.RemoveAt(i);
}
else
i++;
for
приктически так же выглядитfor (var i = 0; i < Group.Count;) // да да, инкримент просто не пишем и получается аналог while
if (Group[i] is MissingReferenceException)
{
Destroy(Group[i]);
Group.RemoveAt(i);
}
else
i++;
form
и отображаете как диалог. модально кстати, а не модельно.. если слово смущает, просто нагуглите модальное окно ))var frm = this.Owner;
избавляет от незнания переменной, указывающей на экземпляр класса. но именно тут и возникает ваша проблемаfrmLScheta
) поля форм нужных типов (допустим frmSprStreet SprStreet
). и пользоваться ими вместо локальных переменных. получится что то вродеvar frm = (this.Owner as frmLScheta).SprStreet;
Ничего не понялвыходит лукавите. поняли, но не очень удачно. при этом удаляете свой камент. да еще и медальку вешаете себе - тройное лукавство. фу